mysql - mysql 中的自定义排序

标签 mysql sql-order-by

我有一个表,其中有 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/

相关文章:

mysql - 如何在 SQL 中使用条件语句进行排序

hibernate - 如何在 Nhibernate 中使用 case 和 order by?

mysql - MySQL是否维护您正在查询的表的顺序

php - 如何用php从MySQL表中获取多对多关系数据排序并显示?

mysql - 如何使用 SQL 将相同的列值分组在一起?

php - SQL 查询 onsubmit - 更改现有结果

MySQL - 舍入(某种程度) - 仅当大于/小于 10 时才需要舍入数字

mysql - SQL SELECT 查询列中的多个值和范围

mysql - 按名称排序未按预期工作 - MySQL

php session 错误注销