Продолжая мой последний вопрос ...
Позвольте мне попытаться объяснить мою схему.У меня есть три таблицы, которые мы будем называть пользователями (с идентификаторами и именами столбцов), сторонами (с идентификаторами столбцов, partydate и user_id) и вопросами (с идентификаторами столбцов, createate и user_id).Мое требование - показать каждому пользователю количество сторон за последний год и вопросы, созданные за последний год.
Мой запрос выглядит так:
SELECT users.id, users.name,
SUM(CASE WHEN (parties.party> NOW() - interval '1 year') THEN 1 ELSE 0 END)
AS numparties,
SUM(CASE WHEN (questions.createdate> NOW() - interval '1 year') THEN 1 ELSE 0 END)
AS numquestions
FROM users
LEFT JOIN parties ON users.id=parties.user_id
LEFT JOIN questions ON users.id=questions.user_id
GROUP BY users.id, users.name;
Это работает почти на 100%.Я получаю результат со всеми пользователями, которые существуют.Проблема в том, что для некоторых пользователей (очень маленьких) я считаю партию или вопрос дважды.Например, если я изменю приведенный выше запрос, чтобы вместо того, чтобы суммировать их, а также удалял GROUP BY, вместо того, чтобы суммировать их, а вместо этого выводил GROUP BY, я мог получить что-то вроде:
user.id | user.name | parties.id | questions.id
-----------------------------------------------
0 John 15 2
0 John 15 7
Вы можете увидеть этопоказывает сторон.ид дважды.
Когда я использовал COUNT (), я мог положиться на DISTINCT, но с SUM я не уверен, как я могу.Я хочу что-то вроде:
SUM(CASE WHEN (parties.party> NOW() - interval '1 year' AND parties.id IS DISTINCT) THEN 1 ELSE 0 END)
AS numparties,
Но, конечно, это не верно.Можно ли легко исправить эту небольшую проблему?