我知道标题并不能很好地解释我的问题(如果有人可以提出更好的标题,那么请编辑它)。这就是我想要做的,说我有下表:
id | a | b | c
------------------
1 | 3 | 3 | 3
2 | 20 | 40 | 30
3 | 40 | 30 | 10
4 | 30 | 10 | 15
5 | 10 | 15 | 6
6 | 15 | 6 | 20
这是一个略有截断的版本,我还有一些列要排序,但数据背后的原理和我的问题是一样的。
我想要的是按以下方式订购数据:
因此,结果集看起来像:
id | a | b | c
------------------
3 | 40 | 30 | 10
2 | 20 | 40 | 30
6 | 15 | 6 | 20
4 | 30 | 10 | 15
5 | 10 | 15 | 6
1 | 3 | 3 | 3
做一个
SELECT id, a, b, c
FROM table
ORDER BY a DESC, b DESC, c DESC
显然先给我命令,然后是b,最后是c,所以下面的(这不是我需要的):
id | a | b | c
------------------
3 | 40 | 30 | 10
4 | 30 | 10 | 15
2 | 20 | 40 | 30
6 | 15 | 6 | 20
5 | 10 | 15 | 6
1 | 3 | 3 | 3
答案 0 :(得分:1)
我不熟悉MySQL TSQL方言,但您必须首先选择具有最高'A'值的行,对具有最高'B'的行执行UNION ALL(即没有明确的通过排序) value,使用具有最高'C'值的行执行UNION ALL,然后执行UNION ALL,其余行按'C'排序,并排除已选择的3行(按id)。
答案 1 :(得分:0)
我刚刚测试了以下似乎可行的(但确实涉及3个子查询):
SELECT id, a, b, c
FROM test
ORDER BY FIELD(a,(SELECT MAX(a) FROM test)) DESC,
FIELD(b,(SELECT MAX(b) FROM test)) DESC,
FIELD(c,(SELECT MAX(c) FROM test)) DESC,
c DESC