修改SQL查询以显示数量为零的区域及商品记录
解决SQL分组后无法显示数量为零的区域/商品问题
你的原查询只会返回my_table中存在对应记录的area+item组合,当某个组合没有记录或所有qty之和为0时,不会出现在结果里。要显示所有区域的所有商品(包括数量为0的情况),可以通过以下方式实现:
方案1:使用独立的区域表和商品表(推荐)
如果你的数据库中有单独存储所有区域的areas表和存储所有商品的items表,用这两个表的笛卡尔积生成所有可能的组合,再左连接原表的聚合结果:
SELECT i.item, COALESCE(SUM(t.qty), 0) AS total_qty, a.area FROM areas a CROSS JOIN items i LEFT JOIN my_table t ON a.area = t.area AND i.item = t.item GROUP BY a.area, i.item ORDER BY a.area, i.item;
方案2:仅使用现有表
如果没有独立的区域/商品表,从my_table中提取所有唯一的area和item来生成组合:
SELECT i.item, COALESCE(SUM(t.qty), 0) AS total_qty, a.area FROM (SELECT DISTINCT area FROM my_table) a CROSS JOIN (SELECT DISTINCT item FROM my_table) i LEFT JOIN my_table t ON a.area = t.area AND i.item = t.item GROUP BY a.area, i.item ORDER BY a.area, i.item;
关键说明
CROSS JOIN:生成所有区域与商品的组合,确保每个区域的每个商品都被纳入结果LEFT JOIN:保留所有组合记录,即使my_table中没有对应的数据COALESCE:将无数据时SUM(qty)返回的NULL转换为0,统一结果格式
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

