X, Y, Z의 3 개 열이 각 숫자 인 경우 어떻게 각 행을 최대로 가장 많이 반환하고 행을 최대로 반환 할 수 있습니까?MySQL : 행을 정렬 한 다음 열을 정렬 하시겠습니까?
내가 가진 그래서 경우 :
X Y Z
8 7 9
1 2 3
4 6 5
는 어떻게 얻을 수 :
이 내 머리 위로의 오프
9 8 7
6 5 4
3 2 1
X, Y, Z의 3 개 열이 각 숫자 인 경우 어떻게 각 행을 최대로 가장 많이 반환하고 행을 최대로 반환 할 수 있습니까?MySQL : 행을 정렬 한 다음 열을 정렬 하시겠습니까?
내가 가진 그래서 경우 :
X Y Z
8 7 9
1 2 3
4 6 5
는 어떻게 얻을 수 :
이 내 머리 위로의 오프
9 8 7
6 5 4
3 2 1
SELECT CASE WHEN X >= Y && X >= Z THEN X
WHEN Y >= Z && Y >= X THEN Y
ELSE Z END,
CASE WHEN X >= Y && X < Z THEN X
WHEN X >= Z && X < Y THEN X
WHEN Y >= X && Y < Z THEN Y
WHEN Y >= Z && Y < Z THEN Y
ELSE Z END,
CASE WHEN X <= Y && X <= Z THEN X
WHEN Y <= Z && Y <= X THEN Y
ELSE Z
FROM Table
ORDER BY CASE WHEN X >= Y && X >= Z THEN X
WHEN Y >= Z && Y >= X THEN Y
ELSE Z END;
, 즉 작동합니다. 나는 성과에 대한 약속을하지 않을 것이다. 이것이 Microsoft SQL 인 경우 행 당 값을 순서대로 저장 한 두 번째 테이블을 만들고 두 번째 테이블을 최신 상태로 유지하도록 트리거를 설정해야합니다.
이제 세 개의 열이 있다면 분명히 작동 할 것입니다. 등
------------------------------
| row_id | column_id | value |
------------------------------
| 1 | 'X' | 7 |
| 1 | 'Y' | 8 |
| 1 | 'Z' | 9 |
| 2 | 'X' | 3 |
... 그리고 4 열은 두통의 더, 당신은이 같은 테이블로 정보를 저장하는 새로운 방법을 생각하기 시작해야 할 곳이 정말. 당신은 어떤 종류의 일을,이 형식의 데이터를했으면
:
SELECT row_id, value FROM TABLE ORDER BY row_id, value DESC;
갑자기 슈퍼 쉽게된다.
John의 답변에서와 같이 특정 수의 열을 코딩 할 수 있지만 일반적인 경우에는 쉽게 수행 할 수 없습니다. 이것이 요구 사항이라면 스키마를 지원하기 위해 redsigning을 고려할 것입니다.