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中找到大量示例。