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

MySQL查询如何实现先按url空值升序再按id降序排序

解决方案:先按URL是否为空排序,再按ID降序

你遇到的问题是因为ORDER BY url ASC是按照字符串的字典顺序排序,而非专门区分“空字符串”和“非空字符串”的优先级。要实现先把空URL的记录排在前面,再按ID降序的效果,可以用CASE表达式给空URL的记录设置更低的排序权重,具体修改后的SQL语句如下:

SELECT * FROM r 
WHERE r.type IN('product','manual_change') 
ORDER BY 
    CASE WHEN url = '' THEN 0 ELSE 1 END ASC, 
    id DESC;

原理说明:

  • CASE WHEN url = '' THEN 0 ELSE 1 END ASC:这个表达式会把所有url为空字符串的记录标记为0,非空的标记为1。按这个值升序排列时,0会排在1前面,也就是空URL的记录会优先出现在结果集中。
  • 紧接着的id DESC会在URL状态相同的分组内,按照id从大到小排序,满足你的二次排序需求。

针对你的测试数据验证:

执行上述语句后,结果会先返回id=38(唯一的空URL记录),然后依次是id=42、id=41、id=43、id=39、id=29、id=24、id=22、id=20、id=19,完全符合“先空URL、再ID降序”的排序逻辑。

如果你的表后续允许url字段为NULL,可以把CASE条件调整为CASE WHEN url IS NULL OR url = '' THEN 0 ELSE 1 END ASC,这样能同时覆盖NULL和空字符串的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:43:15