SQL实现表A表B内连接后分组按条件统计Count1、Count2、Count3方法
SQL实现方案
你需要的效果可以通过INNER JOIN+条件聚合实现,核心是用CASE WHEN配合聚合函数完成按规则计数,无需嵌套子查询,写法简洁易读。
示例SQL代码
SELECT -- 此处替换为你实际的分组维度字段,比如B表的分类字段、A表的区域字段等 分组维度1, 分组维度2, -- Count1:三个字段全为'A'时计数 SUM(CASE WHEN A.Ind1 = 'A' AND A.Ind2 = 'A' AND A.Ind3 = 'A' THEN 1 ELSE 0 END) AS `Count 1`, -- Count2:任意字段不为'A'时计数 SUM(CASE WHEN A.Ind1 <> 'A' OR A.Ind2 <> 'A' OR A.Ind3 <> 'A' THEN 1 ELSE 0 END) AS `Count 2`, -- Count3:两者总和,也可以直接写COUNT(*) 效果一致 COUNT(*) AS `Count 3` FROM 表A A INNER JOIN 表B B ON A.关联键 = B.关联键 -- 替换为你实际的关联字段 GROUP BY 分组维度1, 分组维度2 -- 和SELECT里的分组维度保持一致
注意事项
- 如果
Ind1/Ind2/Ind3存在NULL值,NULL和'A'做等于/不等于判断都会返回UNKNOWN,不会被计入任何计数,你可以根据需求调整判断逻辑,比如把NULL视为非'A',可以修改判断条件为COALESCE(A.Ind1, '') = 'A'。 - 上面示例中
Count 3直接用COUNT(*)即可,因为INNER JOIN后的所有行必然符合Count1或Count2的规则,比手动相加两列写法更高效。
内容的提问来源于stack exchange,提问作者Arthi
相关产品推荐
相关产品推荐

