MySQL:按两列的顺序排序,最后是NULL吗?

时间:2011-07-28 11:56:05

标签: mysql sql-order-by

我知道SO上有类似的问题,但不幸的是我找不到我的答案,所以问这里。

我的结果表结构如下所示:

id    item_id   price    group
-------------------------------
1     3472      NULL      
2     234       300      1
3     4872      150      1
4     1109      100
5     5582      300      0
6     144       150      2
7     1384      NULL     1
8     627       100      2

price列可以包含NULL,group列可以包含空结果。

该表格按价格排序。

我需要的是:

  1. 按两列排序结果集 - 价格

  2. 相同price的结果必须根据他们的顺序进行ordererd 第一组(升序),具有相同价格但没有组的结果跟在它们之后。

  3. 无论price排序顺序如何,NULL总是必须是最后一个(DESC 或ASC)。

  4. 因此,具有排序的表应如下所示:

    id    item_id   price    group
    -------------------------------
    8     627       100      2
    4     1109      100
    3     4872      150      1
    6     144       150      2
    5     5582      300      0
    2     234       300      1
    7     1384      NULL     1
    1     3472      NULL      
    

    当我需要最后订购NULL时,我会使用类似的东西:

    ORDER BY ISNULL(column), column
    

    通过多列排序通常不是问题,但我只是坚持这个。我花了几个小时没有结果。

1 个答案:

答案 0 :(得分:5)

ORDER BY IF( ISNULL( price ), 1, 0 ), price, IF( group='', 1, 0 ), group ASC