求正确SQL查询:按指定区域统计date字段空值数量
解决指定区域date字段空值统计问题
你的SQL存在两处语法逻辑错误:
- SELECT子句中
Region和count(*)之间缺少逗号,会触发语法报错 - GROUP BY子句使用
region in ('77', 'LE')是错误用法,GROUP BY应指定分组字段,筛选指定区域的逻辑需放在WHERE条件中
方案1:仅统计指定区域中存在date空值的记录
SELECT Region, COUNT(*) AS Count FROM tablename WHERE date IS NULL AND Region IN ('77', 'LE') GROUP BY Region;
该查询会返回指定的两个区域中,各自date字段为空的记录数,仅当区域存在空值时才会出现在结果集里。
方案2:强制返回所有指定区域,无空值时显示0
如果需要不管指定区域有没有空值,都显示该区域和对应的0计数,可以通过生成目标区域列表后左连接统计结果实现:
WITH target_regions AS ( SELECT '77' AS Region UNION ALL SELECT 'LE' AS Region ) SELECT tr.Region, COALESCE(t.Count, 0) AS Count FROM target_regions tr LEFT JOIN ( SELECT Region, COUNT(*) AS Count FROM tablename WHERE date IS NULL GROUP BY Region ) t ON tr.Region = t.Region;
COALESCE函数用于将NULL替换为0,确保没有空值的区域也能显示0计数。
内容的提问来源于stack exchange,提问作者Akshay Chari
相关产品推荐
相关产品推荐

