SQL如何统计每个用户的不同选择项数量 实现分组去重计数查询
解决方案
你完全不需要用到INNER JOIN,直接搭配GROUP BY和去重计数函数就能实现需求,写法非常简洁:
SELECT Name, COUNT(DISTINCT Choice) AS numberOfChoices FROM 你的表名 -- 替换成你实际的表名即可 GROUP BY Name;
逻辑说明
GROUP BY Name会将所有同名的记录聚合为同一组COUNT(DISTINCT Choice)会统计每组内去重后的Choice值总数,刚好匹配你要的「不同Choice值的数量」的统计需求- 用
AS给统计结果起别名numberOfChoices,最终输出的字段名和你期望的结果完全一致
如果你的业务场景必须用INNER JOIN实现(比如有其他关联逻辑要兼容),也可以用子查询先去重再分组统计,写法如下:
SELECT t1.Name, COUNT(t1.Choice) AS numberOfChoices FROM (SELECT DISTINCT Name, Choice FROM 你的表名) t1 INNER JOIN (SELECT DISTINCT Name FROM 你的表名) t2 ON t1.Name = t2.Name GROUP BY t1.Name;
第一种写法的执行效率和可读性都更高,优先推荐使用。
内容的提问来源于stack exchange,提问作者Gops60
相关产品推荐
相关产品推荐

