You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 read
  • SUM(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:12:07