Найти общее количество баллов для каждого D, если в P нет D, то баллы должны быть 0 - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу найти общее количество баллов за каждый D. Если в P нет экземпляра D, то точки должны возвращаться как 0. Мои таблицы:

P 
code (referencing D.id), c_code (referencing C.id)

D
id, name

C
id
name
points

Мой запрос:

SELECT D.id, SUM(C.points)
FROM D JOIN P ON D.id=P.code JOIN C ON P.c_code=C.id
GROUP BY D.id
HAVING CASE WHEN D.id NOT IN (SELECT *
                               FROM P p1
                               WHERE p1.code=D.id) THEN '0' end;

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы можете использовать внешние объединения, как в:

select
    d.id, sum(c.points)
  from d
  left join p on p.code = d.id
  left join c on c.id = p.c_code
  group by d.id  
0 голосов
/ 05 ноября 2018

Вам нужны Внешние объединения, чтобы получить несовпадающие строки, плюс coalesce, чтобы вернуть ноль вместо NULL:

SELECT D.id, coalesce(SUM(C.points), 0)
FROM D LEFT JOIN P ON D.id=P.code
LEFT JOIN C ON P.c_code=C.id
GROUP BY D.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...