Прежде всего, это домашнее задание, поэтому я ищу помощь, а не решения.Позвольте мне попытаться объяснить мою схему.У меня есть три таблицы, которые мы будем называть пользователями (с идентификаторами и именами столбцов), сторонами (с идентификаторами столбцов, partydate и user_id) и вопросами (с идентификаторами столбцов, createate и user_id).Мое требование - показать каждому пользователю количество сторон за последний год и вопросы, созданные за последний год.Сначала у меня было что-то вроде этого:
SELECT users.id, users.name,
COUNT(parties.id) AS numparties, COUNT(qustions.id) AS numquestions
FROM users
FULL JOIN parties ON users.id=parties.user_id
FULL JOIN questions ON users.id=questions.user_id
WHERE (parties.partydate > NOW() - interval '1 year' OR parties.partydate IS NULL)
OR (questions.createdate > NOW() - interval '1 year' OR questions.createdate IS NULL)
GROUP BY users.id, users.name
Теперь это работает, почти!Проблема в том, что если у пользователя нет ни сторон, ни вопросов в течение прошлого года, они вообще не отображаются в результате.Я хочу, чтобы такой пользователь появлялся, я просто хочу, чтобы он показывал им 0 для каждого числа и числа.
Мне кажется, что здесь нужен какой-то условный подсчет, в котором я хочу только СЧИТАТЬ (party.id) ГДЕ вечеринка этой партии в течение прошлого года, и то же самое для вопросов.Я просто не уверен, как это сделать.У меня есть хакерский способ обхода, который я хочу сделать, где я в основном ОБЪЕДИНЯЮ вышеупомянутый запрос с почти идентичной копией самого себя, за исключением того, что я использую SUM (0) для числа и числа, а мой оператор WHERE именно там, где дата <= вместо>.Я чувствую, что это не лучший способ сделать это.
Есть ли указатели в правильном направлении?Спасибо за помощь!