You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL排序问题:如何让priority>0的记录排在查询结果前列?

解决SQL排序优先级问题

问题核心是要先把prioridade > 0的记录放在最前面,再分别执行各自的排序规则。原SQL的问题在于,当prioridade = 0时,CASE表达式返回NULL,而大多数数据库中NULL在升序排序里会排在非NULL值之前,导致这部分记录跑到了前面。

调整方案是在ORDER BY里新增一个分组排序项,明确区分两类记录的先后顺序:

SELECT * 
FROM registros  
ORDER BY 
  -- 让prioridade>0的记录排在前面,=0的排在后面
  CASE WHEN prioridade > 0 THEN 0 ELSE 1 END ASC,
  -- 对prioridade>0的记录按prioridade升序排序
  CASE WHEN prioridade > 0 THEN prioridade END ASC,
  -- 对prioridade=0的记录按id降序排序,同时不影响前一类记录的排序
  id DESC

逻辑说明:

  • 第一个CASE表达式:给prioridade>0的记录标记为0,prioridade=0的标记为1,升序排序后0组自然排在1组前面。
  • 第二个CASE表达式:仅对prioridade>0的记录按prioridade升序排列,prioridade=0的记录在此项上返回NULL,不影响它们的相对顺序(由第三个排序项决定)。
  • 第三个排序项id DESC:对prioridade=0的记录按id降序排列,而prioridade>0的记录已经由第二个排序项排好,此项不会打乱它们的顺序。

内容的提问来源于stack exchange,提问作者Leandro San.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:05:20