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

如何让orders表中cid为2的所有订单优先展示,其余订单排在后面

问题背景

现有orders表,表结构及示例数据如下:

OIDCIDODATE
1101/01/21
2201/02/21
3220/01/21
4320/01/21
5420/01/21

需求为查询时优先展示所有CID为2的订单,其余订单排在后面。

实现方法

核心思路是在ORDER BY子句中自定义排序权重,给CID为2的记录分配更小的排序值即可实现优先级排序。

全数据库通用写法

使用CASE WHEN表达式定义排序权重,兼容所有主流SQL数据库(MySQL、PostgreSQL、Oracle、SQL Server等):

SELECT OID, CID, ODATE
FROM orders
ORDER BY 
  CASE WHEN CID = 2 THEN 0 ELSE 1 END ASC, -- 优先排序CID=2的记录
  OID ASC; -- 同优先级下可自定义其他排序规则,此处示例按订单ID升序

写法说明

  • CASE WHEN CID = 2 THEN 0 ELSE 1 END会为所有CID=2的记录生成排序值0,其余记录生成排序值1,按该值升序排序时,0值记录会全部排在1值记录之前
  • 你可以根据业务需求追加其他排序规则,比如同优先级下按订单日期ODATE排序、按OID倒序等,直接在ORDER BY后追加对应字段即可

MySQL专属简化写法

MySQL支持直接对布尔表达式的返回结果排序,可简化写法:

SELECT * FROM orders ORDER BY (CID != 2) ASC, OID ASC;

写法说明

MySQL中布尔表达式判断为真时返回1,判断为假时返回0:当CID=2时CID !=2的结果为0,其余情况为1,升序排序即可实现CID=2的记录优先展示。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:09:04