SQL Select Distinct Date & ID count - PullRequest
       2

SQL Select Distinct Date & ID count

0 голосов
/ 04 октября 2018

моя таблица SQL равна

|  date             |  id  |
|     03 Aug 2018   |   1  |
|     03 Aug 2018   |   2  |
|     04 Aug 2018   |   1  |
|     04 Aug 2018   |   3  |
|     05 Aug 2018   |   1  |
|     05 Aug 2018   |   2  |
|     05 Aug 2018   |   3  |

Я хотел бы получить вывод, как показано ниже

|        date       |  id  | count  |
|     03 Aug 2018   |   1  |    1   |
|     03 Aug 2018   |   2  |    1   |
|     03 Aug 2018   |   3  |    0   |
|     03 Aug 2018   |   4  |    0   |
|     04 Aug 2018   |   1  |    0   |
|     04 Aug 2018   |   2  |    0   |
|     04 Aug 2018   |   3  |    1   |
|     04 Aug 2018   |   4  |    0   |
|     05 Aug 2018   |   1  |    1   |
|     05 Aug 2018   |   2  |    1   |
|     05 Aug 2018   |   3  |    1   |
|     05 Aug 2018   |   4  |    0   |

В принципе, я хочу получить отличную дату, идентификатор и их количество, если идентификаторотсутствует на определенную дату, затем отображается как 0.

Я пробовал запрос

select date, id, count(id) from table group by date,id;

Но вывод не дает мне желаемого результата.Есть ли способ добиться желаемого результата с помощью SQL-запроса?

Буду признателен за помощь.

1 Ответ

0 голосов
/ 04 октября 2018

Используйте cross join для генерации строк и left join для ввода существующих данных.Предположительно, вы хотите агрегировать для счетчика:

select d.date, i.id, count(t.id)
from (select distinct date from t) d cross join
     (select distinct id from t) i left join
     t
     on t.date = d.date and t.id = i.id
group by d.date, i.id
order by d.date, i.id;

Если счетчик всегда равен 0 или 1, агрегирование не требуется (выполнение запроса становится более дорогим).

select d.date, i.id, ( t.id is not null )::int as count
from (select distinct date from t) d cross join
     (select distinct id from t) i left join
     t
     on t.date = d.date and t.id = i.id
order by d.date, i.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...