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

SQL工单表多条件排序:未答复按id升序置顶、已答复按id降序置底

解决方案

你可以通过在ORDER BY子句中使用条件判断实现分组自定义排序,以下是兼容绝大多数数据库(MySQL、PostgreSQL、SQL Server等)的标准SQL写法:

ORDER BY 
  has_answer ASC,
  CASE WHEN has_answer = 0 THEN id END ASC,
  CASE WHEN has_answer = 1 THEN id END DESC

逻辑说明

  1. 第一层排序has_answer ASC保证所有未答复工单(has_answer=0)始终排在已答复工单(has_answer=1)前面,两类数据完全分区不会穿插
  2. 第二层排序仅对未答复工单生效:has_answer=1的行对应CASE返回值为NULL,在已经按has_answer分区的前提下,不会干扰未答复组的排序逻辑,未答复工单内部按id升序排列,更早创建的工单排在更靠前位置
  3. 第三层排序仅对已答复工单生效:has_answer=0的行对应CASE返回值为NULL,不会干扰已答复组的排序逻辑,已答复工单内部按id降序排列

效果示例

假设存在以下测试数据:

idhas_answer
10
30
21
41

排序后输出的id顺序为1、3、4、2,完全匹配需求。

MySQL专属简化写法

如果你使用的是MySQL数据库,可以用IF函数简化语句:

ORDER BY 
  has_answer ASC,
  IF(has_answer=0, id, 0) ASC,
  IF(has_answer=1, id, 0) DESC

内容的提问来源于stack exchange,提问作者hretic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:18:00