SQL技术求助:如何显示包含NULL值的category分组统计结果
解决方案
你的问题核心是当前SQL逻辑会把income为NULL的行归到'Gaji Rata-rata'分组,且统计方式会忽略NULL相关的计数。要单独显示包含NULL值的category分组,可按以下方式修改代码:
WITH gaji_kat AS ( SELECT *, CASE WHEN income IS NULL THEN NULL -- 为NULL的income单独标记category为NULL WHEN income < 20000 THEN 'Gaji Rendah' WHEN income > 50000 THEN 'Gaji Tinggi' ELSE 'Gaji Rata-rata' END category FROM accounts) SELECT category, COUNT(*) -- 用COUNT(*)统计所有行,避免忽略NULL值的计数 FROM gaji_kat GROUP BY 1
关键调整说明:
- CASE表达式新增NULL判断分支:把
income为NULL的行单独归类为NULL的category,这样GROUP BY时会自动形成独立分组。 - 替换统计函数:
COUNT(category)会忽略列值为NULL的行,改用COUNT(*)可以统计分组内的所有行数,确保NULL分组的数量准确显示。
如果需要确保所有可能的category(包括NULL)即使没有对应数据也能显示(计数为0),可以用预定义所有分类再左连接的方式:
WITH all_categories AS ( SELECT 'Gaji Rendah' AS category UNION ALL SELECT 'Gaji Tinggi' AS category UNION ALL SELECT 'Gaji Rata-rata' AS category UNION ALL SELECT NULL AS category ), gaji_kat AS ( SELECT CASE WHEN income IS NULL THEN NULL WHEN income < 20000 THEN 'Gaji Rendah' WHEN income > 50000 THEN 'Gaji Tinggi' ELSE 'Gaji Rata-rata' END category FROM accounts) SELECT ac.category, COUNT(gk.category) AS count FROM all_categories ac LEFT JOIN gaji_kat gk ON ac.category = gk.category GROUP BY ac.category
内容的提问来源于stack exchange,提问作者Fathin Nawwar Marhadi
相关产品推荐
相关产品推荐

