SQL多列排序需求:最新日期优先,全零Count后置
解决SQL双条件排序问题:日期降序+Count为0后置
你的问题出在排序优先级上——原语句Date desc, count desc会优先按日期排序,导致新日期的Count=0记录会排在旧日期的Count>0记录前面,这和你“所有Count为0的数据排在最后”的需求冲突。
正确的排序逻辑应该是先区分Count是否为0,把非0的记录全部放在前面,再在各自分组内按日期降序排列。用CASE表达式来实现分组优先级:
SELECT 你的字段列表 FROM 你的表名 ORDER BY -- 给Count=0的记录分配更高的排序值,让它们排在后面 CASE WHEN count = 0 THEN 1 ELSE 0 END, -- 同组内按日期最新在前 Date DESC;
如果count字段可能存在NULL值,需要把NULL也归到“后置”组里,调整CASE表达式:
ORDER BY CASE WHEN count IS NULL OR count = 0 THEN 1 ELSE 0 END, Date DESC;
这样排序后,所有Count≠0的记录会按日期从新到旧排列在前,所有Count=0(或NULL)的记录会按日期从新到旧排列在最后,完全符合你的需求。
内容的提问来源于stack exchange,提问作者monojit
相关产品推荐
相关产品推荐

