MySQL按日期分组统计查询需求:生成总数、已读、未读统计结果
MySQL按日期分组统计总数、已读、未读数量的查询语句
没问题,我来帮你写出满足需求的MySQL查询语句!首先我先假设你的数据表有两个核心字段:
- 记录创建/关联的日期字段(比如
created_at,类型可能是datetime或timestamp) - 标记是否已读的字段(比如
is_read,取值为1代表已读、0代表未读,你可以根据实际情况调整)
完整查询语句
SELECT DATE(created_at) AS `date`, COUNT(*) AS total, SUM(CASE WHEN is_read = 1 THEN 1 ELSE 0 END) AS `read`, SUM(CASE WHEN is_read = 0 THEN 1 ELSE 0 END) AS unread FROM your_table_name GROUP BY DATE(created_at) ORDER BY `date` ASC;
语句解释
DATE(created_at):把datetime/timestamp类型的字段提取出纯日期部分,确保同一天的所有记录被归为一组COUNT(*) AS total:统计每组(每天)的总记录数SUM(CASE...) AS read:通过条件判断统计每组中已读的记录数量;如果你的is_read字段是布尔类型或者直接存储0/1,也可以简化为SUM(is_read) AS readSUM(CASE...) AS unread:统计未读记录数,也可以用COUNT(*) - SUM(is_read)来替代,效果完全一致GROUP BY DATE(created_at):按日期分组,这是实现按天统计的核心逻辑ORDER BY date ASC:让结果按日期升序排列,方便按时间顺序查看统计数据
注意事项
- 请将
your_table_name替换成你实际使用的数据表名称 - 如果你的日期字段不是
created_at,替换成数据表中对应的日期字段(比如send_date、record_date) - 如果
is_read字段的取值不是0/1(例如用字符串'Y'/'N'或'read'/'unread'标记),需要调整CASE语句中的判断条件,示例:SUM(CASE WHEN is_read = 'Y' THEN 1 ELSE 0 END) AS `read`
内容的提问来源于stack exchange,提问作者Tarika
相关产品推荐
相关产品推荐

