我可以通过多个列进行排序,并以某种方式保持MySQL中列之间的排序相关吗?

时间:2009-01-25 23:46:46

标签: sql mysql

我知道标题并不能很好地解释我的问题(如果有人可以提出更好的标题,那么请编辑它)。这就是我想要做的,说我有下表:

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

这是一个略有截断的版本,我还有一些列要排序,但数据背后的原理和我的问题是一样的。

我想要的是按以下方式订购数据:

  1. col a中值最高的行
  2. col b中值最高的行
  3. col c中值最高的行
  4. 其后按照col c
  5. 中的值排序的所有剩余行

    因此,结果集看起来像:

    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
    

2 个答案:

答案 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