gpt4 book ai didi

MySQL:先对行排序,然后对列排序?

转载 作者:行者123 更新时间:2023-11-29 15:07:26 25 4
gpt4 key购买 nike

如果我有 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

最佳答案

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;

从我的头顶上看,这应该可行。我不会对性能做出 promise 。如果这是 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;

突然变得 super 简单。

关于MySQL:先对行排序,然后对列排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1702410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com