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

MySQL按日期分组统计全部状态与过期状态数据的方法

解决方案

可以通过条件聚合函数实现需求,将总交易数与expired状态数量的统计逻辑整合到同一查询中,按日期分组返回结果:

SELECT 
    DATE_FORMAT(insert_date, '%d-%m-%Y') AS `date`,
    COUNT(*) AS total_transactions,
    SUM(CASE WHEN status = 'expired' THEN 1 ELSE 0 END) AS expired_count
FROM transaction
WHERE insert_date BETWEEN '2022-11-24 00:00:00' AND '2022-12-08 23:59:59'
GROUP BY DATE_FORMAT(insert_date, '%d-%m-%Y')
ORDER BY `date`;

关键逻辑说明:

  • COUNT(*):统计每个日期下的所有交易总数,不受status字段取值影响。
  • SUM(CASE WHEN status = 'expired' THEN 1 ELSE 0 END):通过CASE表达式判断每条记录的status是否为expired,符合条件则返回1,否则返回0,最终用SUM累加得到该日期下expired状态的总数量。
  • 分组条件改为按格式化后的完整日期(%d-%m-%Y)分组,确保每个日期仅返回一行结果。
  • 追加ORDER BY可让结果按日期顺序排列,提升可读性。

如果使用的是MySQL这类支持DATE()函数的数据库,也可以用以下写法优化性能——分组时直接基于日期类型而非字符串,仅在输出时做格式转换:

SELECT 
    DATE_FORMAT(insert_date, '%d-%m-%Y') AS `date`,
    COUNT(*) AS total_transactions,
    SUM(CASE WHEN status = 'expired' THEN 1 ELSE 0 END) AS expired_count
FROM transaction
WHERE insert_date BETWEEN '2022-11-24 00:00:00' AND '2022-12-08 23:59:59'
GROUP BY DATE(insert_date)
ORDER BY DATE(insert_date);

内容的提问来源于stack exchange,提问作者budblues

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:30:39