关于SQL代码是否按月份提取去重用户的技术问询
你的SQL完全符合需求!
嘿,我来帮你拆解这段代码,确认它的行为完全匹配你想要的逻辑:
- 按月份分组:
EXTRACT(MONTH FROM created_at)会从登录时间里提取出月份数字,再通过GROUP BY把所有数据按月份拆分成独立的分组,每个分组对应一个月的登录记录。 - 同月份内user_id去重统计:
COUNT(DISTINCT user_id)会在每个月份分组里,只统计不重复的用户ID——也就是说,同一个用户在某个月内登录1次或者100次,都只会被算作1个有效用户。 - 不同月份允许重复统计:因为每个月份是独立的分组,同一个用户如果在1月和2月都有登录,会分别在1月和2月的统计结果里各占一个名额,完全满足你“不同月份可多次出现”的要求。
小提醒
如果你的数据跨了多个年度(比如包含2017年1月和2018年1月),这段代码会把这两个1月的用户数据合并统计,因为EXTRACT(MONTH)只提取月份数字,不包含年份。如果需要区分同月份不同年份的情况,可以修改分组逻辑,比如:
SELECT COUNT(DISTINCT user_id), EXTRACT(YEAR FROM created_at) AS YR, EXTRACT(MONTH FROM created_at) AS MTH FROM user_logins WHERE created_at >= '2017-01-01' AND created_at <= '2018-04-10' GROUP BY EXTRACT(YEAR FROM created_at), EXTRACT(MONTH FROM created_at) ORDER BY YR ASC, MTH ASC
内容的提问来源于stack exchange,提问作者delalma
相关产品推荐
相关产品推荐

