如何编写MySQL查询统计每个账户每月的周六事件记录数量?
MySQL统计用户每月周六事件数查询方案
完整查询语句
SELECT a.name AS Name, SUM(CASE WHEN MONTH(e.date) = 9 AND DAYOFWEEK(e.date) = 7 THEN 1 ELSE 0 END) AS September, SUM(CASE WHEN MONTH(e.date) = 10 AND DAYOFWEEK(e.date) = 7 THEN 1 ELSE 0 END) AS October, SUM(CASE WHEN MONTH(e.date) = 11 AND DAYOFWEEK(e.date) = 7 THEN 1 ELSE 0 END) AS November, SUM(CASE WHEN MONTH(e.date) = 12 AND DAYOFWEEK(e.date) = 7 THEN 1 ELSE 0 END) AS December FROM accounts a LEFT JOIN events e ON a.ID = e.account_id -- 若需限定仅统计2021年数据,可取消下一行注释 -- AND YEAR(e.date) = 2021 GROUP BY a.ID, a.name ORDER BY a.name;
逻辑说明
- 周六判定:MySQL内置
DAYOFWEEK()函数返回值范围为1~7,对应周日到周六,因此值等于7即代表该日期为周六。 - 分月统计:通过
CASE WHEN按月份筛选符合周六条件的记录,配合SUM()累加计数,无符合条件的记录时默认返回0,完全匹配要求的输出格式。 - 关联规则:使用
LEFT JOIN关联账号表和事件表,确保没有事件记录的用户也会出现在最终结果中,不会遗漏有效账号。 - 分组逻辑:按账号ID和姓名分组,保证每个用户对应唯一一行统计结果。
内容的提问来源于stack exchange,提问作者T. Hægh
相关产品推荐
相关产品推荐

