SQL按特定值组排序

时间:2017-04-25 13:31:15

标签: sql sorting sql-order-by

我试图找到解决方案,我可能做错了研究,这就是我需要你帮助的原因:(

有6种不同的类别,具有不同的值。我想选择所有这些,但是在2个不同的组中排序:第一个包含1到3之间的所有组,按另一个值排序。 总是在同一个请求中,我想显示4到6之间的类别,按其他值排序。

更好的方法是告诉你之前和之后,我想要的是什么:

|Category | name     |
|    1    | Barney   |
|    6    | Ted      |
|    6    | Anita    |
|    3    | Jessica  |
|    2    | Marshall |
|    3    | Lily     |
|    4    | Robin    |
|    2    | Bryan    |
|    5    | Oliver   |

|Category | name     | ----- Alphabetic sort
|    1    | Barney   |
|    2    | Bryan    |
|    3    | Jessica  |
|    3    | Lily     |
|    2    | Marshall |
---------------------------Imaginary line which seperate 2 groups : category 1 2 3 and 4 5 6
|    6    | Anita    |
|    5    | Oliver   |
|    4    | Robin    |
|    6    | Ted      |

我希望你能理解我的意思!

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

试试这个:

ORDER BY CASE  
            WHEN category IN (1, 2, 3) THEN 1
            WHEN category IN (4, 5, 6) THEN 2
            ELSE 3
         END,
         name

该查询使用CASE表达式将category子集组合在一起:子集123的值为{{ 1}}因此具有最高优先级。子集145的值分配为6,而其他类别的优先级最低,即2的值。

答案 1 :(得分:2)

如果您使用的是MySQL或PostgreSQL,可以使用ORDER BY category>3, name轻松获得此信息,假设只有这两个可能的组。

答案 2 :(得分:1)

SELECT语句中尝试:

... ORDER BY IF(Category<4,0,1) ASC, name ASC