SQL查询求助:如何修改语句实现按机构每月统计去重用户数量
SQL统计问题修复方案
问题原因
现有查询结果不符合预期的核心原因是GROUP BY分组规则错误:
- 原分组包含
joveuser字段,相当于按「月份+单个用户」拆分分组,每个分组内仅存在1个唯一用户,因此去重计数结果均为1 - 未将统计维度
institutionid加入分组,不符合按机构统计的需求,也不符合SQL标准的非聚合字段必须出现在GROUP BY中的校验规则
修改后的查询语句
SELECT s.institutionid, SUBSTR(m.timestamp, 1, 7) AS month, COUNT(DISTINCT m.joveuser) AS monthly_distinct_user_count FROM stats_to_institution AS s JOIN masterstats_innodb AS m ON s.statid = m.id WHERE m.timestamp >= '2021-11-15' GROUP BY s.institutionid, month;
核心修改点
- 移除
GROUP BY中的joveuser字段,调整为按「机构ID+月份」两个维度分组,保证每个机构每个月仅生成一条统计记录 - 在
GROUP BY中补充s.institutionid,满足按机构统计的业务需求,同时兼容SQL语法校验规则 - 可自行调整字段别名提升可读性,该调整不影响统计结果正确性
内容的提问来源于stack exchange,提问作者Ganesh
相关产品推荐
相关产品推荐

