Как включить 0 (int) результаты в агрегат COUNT?

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 ответа


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

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

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

SELECT nummerid, 

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

FROM luisteraar l 

GROUP BY nummerid

Есть идеи?

10000