PostgreSQL多表统计问题:基于idmaster统计data1/data2的ID出现次数
正确的PostgreSQL统计SQL写法
要实现统计idmaster中每个ID在data1和data2的出现次数,同时保留无数据的ID,你可以通过左连接分组统计子查询的方式实现,避免直接关联导致的笛卡尔积问题:
SELECT im.id, COALESCE(d1.data1_count, 0) AS data1_count, COALESCE(d2.data2_count, 0) AS data2_count FROM idmaster im LEFT JOIN ( -- 统计data1中各ID的出现次数 SELECT id, COUNT(*) AS data1_count FROM data1 GROUP BY id ) d1 ON im.id = d1.id LEFT JOIN ( -- 统计data2中各ID的出现次数 SELECT id, COUNT(*) AS data2_count FROM data2 GROUP BY id ) d2 ON im.id = d2.id ORDER BY im.id;
关键说明:
- 子查询
d1和d2分别对data1、data2按ID分组统计,避免直接关联两张数据表格产生的重复计数问题 LEFT JOIN保证idmaster中的所有ID都会被返回,无论在data1或data2中是否存在匹配记录COALESCE函数将无匹配时的NULL值转换为0,统一输出格式
内容的提问来源于stack exchange,提问作者mack
相关产品推荐
相关产品推荐

