基于两列组合统计Distinct值的SQL查询结果不符问题
嘿,这问题我碰到过!核心问题就是你之前的查询只针对USERID单个字段去重计数,但现在需要基于两列组合的唯一值来统计,所以才会出现计数偏少的情况。
给你两种可行的解决思路,根据你的数据库类型选就行:
方法1:支持多列DISTINCT的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)
直接用COUNT(DISTINCT 列1, 列2)来统计两列组合的唯一数量,写法简洁不容易出错:
SELECT SUM(unique_combos) AS total FROM ( -- 统计表1中USERID和目标列的唯一组合数 SELECT COUNT(DISTINCT USERID, your_second_column) AS unique_combos FROM table1 UNION ALL -- 对其他表做同样处理 SELECT COUNT(DISTINCT USERID, your_second_column) AS unique_combos FROM table2 -- 有更多表就继续UNION ALL追加 ) AS combo_counts;
方法2:不支持多列DISTINCT的老版本数据库
用字符串拼接的方式把两列合并,再对拼接后的结果去重计数。注意要选一个不会出现在两列内容里的分隔符(比如|或者#),避免拼接后出现重复的误判:
SELECT SUM(unique_combos) AS total FROM ( SELECT COUNT(DISTINCT CONCAT(USERID, '|', your_second_column)) AS unique_combos FROM table1 UNION ALL SELECT COUNT(DISTINCT CONCAT(USERID, '|', your_second_column)) AS unique_combos FROM table2 ) AS combo_counts;
这样修改后,同一USERID下不同第二列值的记录都会被算作独立的条目,统计出来的总数应该就能匹配你预期的35了。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

