列聚合不完整咨询:为何GROUP BY后未得到预期聚合结果?
问题原因及修正方案
核心问题:GROUP BY字段错误
你写的GROUP BY ID, CREATED, VER会把所有字段组合不同的记录拆成独立分组,而原始数据中两条记录的VER字段值不同(一个是2023.4.6,一个是NULL),所以被分成了两个分组,导致聚合结果拆分:
- 第一组(ID=61, CREATED=NULL, VER=2023.4.6):
VER不为NULL,所以VER_AGG=0;CREATED为NULL,所以CREATED_AGG=0 - 第二组(ID=61, CREATED=NULL, VER=NULL):
VER为NULL,所以VER_AGG=1;CREATED为NULL,所以CREATED_AGG=0
这就是为什么你得到了两行结果,而非预期的一行。
修正后的SQL
要实现按ID聚合所有记录的统计,只需将GROUP BY改为仅按ID分组:
SELECT ID, SUM(CASE WHEN CREATED IS NOT NULL THEN 1 ELSE 0 END) AS CREATED_AGG, SUM(CASE WHEN VER IS NULL THEN 1 ELSE 0 END) AS VER_AGG FROM TABLE GROUP BY ID
修正后的结果
执行上述SQL后,会得到你预期的结果:
ID|CREATED_AGG|VER_AGG | --+-----------+------------------+ 61| 0| 1|
内容的提问来源于stack exchange,提问作者PuffedRiceCrackers
相关产品推荐
相关产品推荐

