MySQL:排序一行,然后对列进行排序?

时间:2009-11-09 17:14:06

标签: mysql sorting

如果我有3列,X,Y,Z,它们都是数字,我怎样才能让每行返回最大,然后行返回最小?

所以,如果我有:

X    Y    Z
8    7    9
1    2    3
4    6    5

我怎么能得到:

9    8    7
6    5    4
3    2    1

2 个答案:

答案 0 :(得分: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;

突然变得非常容易。

答案 1 :(得分:0)

您可以编写特定数量的列,如John的答案,但是对于一般情况,您不能轻易地执行此操作。如果这是一个要求,那么我会考虑重新设计架构以支持它。