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

MySQL按日期分组后将result拆分为pass/fail列的查询方案

解决方案

你的原SQL语句会按日期和result分组,导致每个日期对应两行数据(分别对应pass和fail的计数),而要实现将pass和fail转为同一行的列,需要使用条件聚合来完成行转列的效果。

通用SQL写法(适用于PostgreSQL、SQL Server、MySQL等多数数据库)

SELECT 
    DATE(startTime) AS date,
    COUNT(CASE WHEN result = 'pass' THEN 1 END) AS pass,
    COUNT(CASE WHEN result = 'fail' THEN 1 END) AS fail
FROM mytable
GROUP BY DATE(startTime)
ORDER BY date DESC;

MySQL专属简化写法

如果使用MySQL,也可以用IF函数替代CASE WHEN,写法更简洁:

SELECT 
    DATE(startTime) AS date,
    COUNT(IF(result = 'pass', 1, NULL)) AS pass,
    COUNT(IF(result = 'fail', 1, NULL)) AS fail
FROM mytable
GROUP BY DATE(startTime)
ORDER BY date DESC;

逻辑说明

  • COUNT()函数会自动忽略NULL值:当result符合指定条件时返回1(会被计入统计),不符合时返回NULL(不会被计数),以此分别统计每个日期下pass和fail的数量。
  • GROUP BY DATE(startTime)确保按日期分组,将同一日期的所有记录聚合为一行。
  • ORDER BY date DESC是可选配置,用来让结果按日期倒序排列,和你给出的示例结果顺序一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:10:36