我有一个表,其中有 3 个字段
+------+------+------+ | name | type | rank | +------+------+------+ | abc | A | 1 | | def | B | 1 | | ghi | A | 2 | | jkl | C | null | | mno | B | 2 | | pqr | C | 1 | +------+------+------+
如何先按类型(A、B、C)对该表进行排序,然后按排名升序排序?因此,带有 null 的排名位于排名> 0 之后?
最佳答案
您可以在 ORDER BY
中使用 CASE
表达式:
SELECT *
FROM YourTable
ORDER BY type
,CASE WHEN rank IS NULL THEN 1 ELSE 0 END
,rank
演示:SQL Fiddle
您还可以使用:
SELECT *
FROM YourTable
ORDER BY type
,COALESCE(rank,999999)
但是你必须选择一个数字,该字段永远不能高于,第一种方法消除了猜测。
关于mysql - mysql 中的自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32668652/