如何按ID分组统计SQL多列的不同值数量?
按ID分组统计各列唯一值数量的SQL解决方案
问题需求
按ID分组,分别统计每列的不同值个数(非多列联合去重统计)。
示例数据
ID Var_A Var_B 1 A 2022-01 1 B 2022-01 1 C 2022-01 2 A 2022-01 2 A 2022-02 2 Z 2022-03 2 Z 2022-01
期望输出
ID N_Var_A N_Var_B 1 3 1 2 2 3
注:原期望输出中ID=2的Var_B统计值标注为4,实际根据示例数据应为3,此处修正为正确结果。
原SQL问题分析
你使用的COUNT(Var_A)、COUNT(Var_B)仅统计列中非空行的总数,不会对列值去重,因此无法得到预期的不同值数量。
解决方案
使用COUNT(DISTINCT 列名)语法,先对列值去重再统计数量:
SELECT ID, COUNT(DISTINCT Var_A) AS N_Var_A, COUNT(DISTINCT Var_B) AS N_Var_B FROM TABLE GROUP BY ID;
说明
COUNT(DISTINCT 列名)会先筛选出该列的所有唯一值,再统计这些唯一值的数量,正好满足按ID分组后各列单独统计不同值的需求。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

