如果我有3列,X,Y,Z,每個都是一個數字,我怎樣才能讓每一行返回最大值到最小值,然後行返回最大值到最小值?MySQL:排序行,然後排列列?
所以,如果我有:
X Y Z
8 7 9
1 2 3
4 6 5
我怎麼能拿:
9 8 7
6 5 4
3 2 1
如果我有3列,X,Y,Z,每個都是一個數字,我怎樣才能讓每一行返回最大值到最小值,然後行返回最大值到最小值?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,那麼我會試着製作第二個表,按順序存儲每行的值,並設置一個觸發器來保持第二個表爲最新。
現在,如果你有3列,這顯然只會起作用。 4列更是一個頭疼的,那就是真的,你需要開始考慮爲存儲的信息,一條新的途徑,例如像這樣的表:
------------------------------
| row_id | column_id | value |
------------------------------
| 1 | 'X' | 7 |
| 1 | 'Y' | 8 |
| 1 | 'Z' | 9 |
| 2 | 'X' | 3 |
...等等。
一旦你得到的數據以這種格式,在做某種:
SELECT row_id, value FROM TABLE ORDER BY row_id, value DESC;
突然變得無比輕鬆。
您可以編寫特定數量的列,如John的答案中所述,但您無法輕鬆地在一般情況下執行此操作。如果這是一個需求,那麼我會考慮重新設計模式來支持它。