MySQL使用GROUP BY的查询中特定列返回空结果问题咨询
问题原因分析
- 核心问题出在分组查询的写法不符合SQL逻辑规范:你的查询使用
GROUP BY month, year, postal将相同年月、相同邮编的记录合并为一行,但SELECT子句中直接引用了value_bezoeken、value_verkocht、type三个未参与分组也没有被聚合函数包裹的字段。 - 在MySQL关闭了
ONLY_FULL_GROUP_BYsql_mode的前提下,数据库会默认取分组内的第一条记录返回。你的数据中同个分组下type = 'bezoeken'的记录排在type = 'verkocht'之前,所以返回的都是type = 'bezoeken'行的内容,而这类行本身的value_verkocht字段就是空值,最终查询结果的sum_verkocht列就全为空。
修正后的查询写法
要同时获取同一分组下两种type对应的数值,需要用条件聚合的方式查询,参考写法如下:
SELECT MAX(CASE WHEN type = 'bezoeken' THEN value_bezoeken END) AS sum_bezoeken, MAX(CASE WHEN type = 'verkocht' THEN value_verkocht END) AS sum_verkocht, postal, month, year FROM results WHERE admin_user_id = 1 GROUP BY month, year, postal;
内容的提问来源于stack exchange,提问作者TP Projects
相关产品推荐
相关产品推荐

