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

MySQL查询中如何将0与NULL分组合并?

解决方法

你的问题核心是分组依据仍使用原始字段o.website——虽然你在SELECT中把NULL转成了0,但GROUP BY依然会区分原始的NULL和0值,所以无法合并为同一行。

只需将GROUP BY的对象改为处理后的字段,同时调整ORDER BY的匹配逻辑即可,修改后的SQL如下:

SELECT IFNULL(o.website, 0) AS website, COUNT(p.orderid) AS ordercount
FROM gdd_order AS o
JOIN gdd_process AS p ON o.orderid = p.orderid
WHERE p.prog_return >= '2024-03-01' 
  AND p.prog_return < '2024-03-31'  
GROUP BY IFNULL(o.website, 0)
ORDER BY FIELD(IFNULL(o.website, 0), 0, 5, 1, 2, 3, 4)

关键修改说明:

  1. GROUP BY替换为处理后字段:用IFNULL(o.website, 0)替代原始的o.website,让NULL和0被归为同一分组
  2. 移除无意义的p.orderid字段:分组后单独返回p.orderid不符合聚合查询规范,会导致语法错误(部分宽松SQL模式下可能不报错,但属于不良写法)
  3. 改用显式JOIN语法:把隐式连接改为JOIN ... ON,提升代码可读性

如果你的MySQL版本支持别名分组(多数现代版本都支持),可以进一步简化代码:

SELECT IFNULL(o.website, 0) AS website, COUNT(p.orderid) AS ordercount
FROM gdd_order AS o
JOIN gdd_process AS p ON o.orderid = p.orderid
WHERE p.prog_return >= '2024-03-01' 
  AND p.prog_return < '2024-03-31'  
GROUP BY website
ORDER BY FIELD(website, 0, 5, 1, 2, 3, 4)

直接使用处理后的别名website进行分组和排序,代码更简洁直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:07:36