У меня есть таблица, состоящая из result
, name
и created_at
как:
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
Я могу подсчитать значение простого прохода или сбой с помощью этого запроса: select count(result) from call_history where result = 1 GROUP BY DATE(created_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;