首页/数据/SQL 速查/CASE 自定义排序顺序
本包目录(311 条)

CASE 自定义排序顺序

按业务枚举顺序排序(如 紧急 > 高 > 普通)的常用写法:把状态映射成数字参与 ORDER BY,避免按拼音或字母排序。

SQL 速查数据更新于 2026-10-12

示例

示例
SELECT id, title, priority
FROM tickets
ORDER BY CASE priority
             WHEN 'urgent' THEN 0
             WHEN 'high'   THEN 1
             WHEN 'normal' THEN 2
             ELSE 3
         END,
         created_at DESC;
原理把枚举映射为可比较的序号
次级排序同优先级内再用时间或主键保证确定性
替代维度表存排序字段,或使用枚举类型自带排序规则
排序键含 CASE 表达式时通常无法使用 priority 列索引,高频场景可冗余一个 sort_no 列。

易错点

  • 只写 CASE 不写次级排序键,同优先级行顺序不稳定,分页会抖动
  • CASE 映射漏掉新枚举值时落到 ELSE 分支,上线新状态前先检查所有排序映射

数据来源与参考

  • MySQL 8.0 Reference Manual · ORDER BY Optimization
  • PostgreSQL Documentation · Sorting Rows
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌