Как включить 0 (int) результаты в агрегат COUNT? PostgreSQL - PullRequest
1 голос
/ 23 марта 2020
INSERT INTO Luisteraar(nummerId, oordeel) VALUES
(4,'good'),
(4,'not-rated'),
(5,'good'),
(5,'good'),
(6,'bad'),
(6,'good'),
(6,'good'),
(7,'not-rated'),
(7,'not-rated'),
(8,'bad'),
(8,'good')

поэтому, если я сделаю это:

SELECT l.nummerid, count(l.oordeel) as manyGood 
FROM luisteraar l 
WHERE l.oordeel = 'good'
GROUP BY l.nummerid

Вывод:

nummerid  manyGood
 4            1
 5            2
 6            2
 8            1 

проблема: я также хочу nummerid 7 с manyGood = 0 в моем выводе. Как я могу сделать это в PostgreSQL

Ответы [ 2 ]

3 голосов
/ 23 марта 2020

Вы можете использовать условное агрегирование вместо предложения WHERE:

SELECT l.nummerid,
       count(l.oordeel) FILTER (WHERE l.oordeel = 'good') as manyGood 
FROM luisteraar l 
GROUP BY l.nummerid
1 голос
/ 23 марта 2020

Подзапрос к той же таблице будет работать, но может быть лучший способ

SELECT nummerid, 

(SELECT count(*) FROM luisteraar WHERE nummerid= l.nummerid AND oordeel= 'leuk') as manyGood 

FROM luisteraar l 

GROUP BY nummerid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...