Mysql 如何将一行按其值和创建日期分组到不同的行中?
我有一个由Mysql 如何将一行按其值和创建日期分组到不同的行中?,mysql,sql,select,Mysql,Sql,Select,我有一个由结果、名称和在处创建的表,如: id | name | result | created_at 1 | Sam | 1 | 2018-07-12 05:08:04 2 | Tam | 1 | 2018-07-12 06:08:04 3 | Qam | 0 | 2018-07-12 07:08:04 4 | Yam | 1 | 2018-09-12 04:08:04 5 | Xam | 0 | 2018-09-12 0
结果
、名称
和在
处创建的表,如:
id | name | result | created_at
1 | Sam | 1 | 2018-07-12 05:08:04
2 | Tam | 1 | 2018-07-12 06:08:04
3 | Qam | 0 | 2018-07-12 07:08:04
4 | Yam | 1 | 2018-09-12 04:08:04
5 | Xam | 0 | 2018-09-12 06:08:04
6 | Lam | 0 | 2018-11-12 07:08:04
(1表示通过,其中0表示失败)我想按创建日期对数据进行分组,该日期显示结果成功或失败的计数,如:
fail | pass | created_at
0 | 2 | 2018-07-12 05:08:04
1 | 1 | 2018-09-12 04:08:04
1 | 0 | 2018-11-12 07:08:04
我可以通过此查询计算just pass或fail的值:
从call\u history中选择count(result),其中result=1 groupby DATE(created\u at)
,但无法为不同的行提供double where子句。您可以使用case
表达式仅为成功/失败返回非空结果,然后使用count
,跳过null
s:
SELECT COUNT(CASE result WHEN 0 THEN 1 END) AS fail,
COUNT(CASE result WHEN 1 THEN 1 END) AS pass,
created_at
FROM call_history
GROUP BY created_at
我将这样写:
SELECT SUM(1 - result) as fail,
SUM(result as pass)
created_at
FROM call_history
GROUP BY created_at;
您可以使用条件聚合。如果您搜索这些术语,您可以在SO中找到大量示例。