Как распределить строку в другую строку, сгруппированную по значению и дате создания?

0

У меня есть таблица, состоящая из 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 для разных строк.

  • 2
    Вы можете использовать условную агрегацию . Если вы ищете эти термины, вы можете найти множество примеров здесь в SO.
Теги:
select

2 ответа

1
Лучший ответ

Вы можете использовать выражение 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
0

Я бы написал это как:

SELECT SUM(1 - result) as fail,
       SUM(result as pass)
       created_at
FROM call_history
GROUP BY created_at;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню