MySQL按分组统计多列去重值:统计各餐厅门店不同到访人数
MySQL按门店统计去重访客数实现方案
正确SQL写法
SELECT location, COUNT(DISTINCT visitor) AS `count` FROM guests GROUP BY location ORDER BY `count` DESC;
逻辑说明
- 首先通过
GROUP BY location将所有到访记录按门店分组 - 聚合函数
COUNT(DISTINCT visitor)会自动对每个门店分组内的访客记录进行去重后计数,天然满足「同一访客到访同一家门店多次仅计数1次」的统计要求 - 该写法无需嵌套子查询,执行效率更高,且兼容所有MySQL 5.7及以上版本
- 针对你提供的样例数据,该语句执行后sydney门店统计结果为3,melbourne门店统计结果为4,完全匹配预期输出
原写法问题说明
你之前的SQL存在两个核心错误:
- 子查询中不允许连续使用多个
DISTINCT关键字,该语法不合法 - 外层查询同时按
location和visitor分组,会导致每个分组仅对应1个访客的记录,最终统计结果不符合按门店汇总的需求
内容的提问来源于stack exchange,提问作者Wonko the Sane
相关产品推荐
相关产品推荐

