Получить количество связанных записей с условиями - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть две таблицы:

users, которые имеют только два столбца: id: INT, name: TEXT

houses, которые имеют три столбца: id: INT, user_id: INT, sold_at: DATE

Iесть этот запрос, который определяет количество домов, проданных пользователем:

SELECT users.id, COUNT(CASE WHEN houses.sold_at IS NOT NULL THEN 1 END)
FROM users
LEFT JOIN houses on houses.user_id = users.id
GROUP BY users.id

Это работает, но мне интересно, есть ли способ не иметь условие в подсчете.Я пробовал это:

SELECT users.id, COUNT(houses.id)
FROM users
LEFT JOIN houses on houses.user_id = users.id
WHERE houses.sold_at IS NOT NULL
GROUP BY users.id

Но это не работает, потому что, если у пользователя нет связанных домов, он не будет отображаться в наборе результатов.

Isмой единственный вариант сделать условия на COUNTs?

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018

Это должно работать с RIGHT JOIN

 SELECT users.id, COUNT(houses.id)
    FROM users
    RIGHT JOIN houses on houses.user_id = users.id
    WHERE houses.sold_at IS NOT NULL
    GROUP BY users.id
0 голосов
/ 26 декабря 2018

count (если я правильно помню) должно работать только с ненулевым значением, поэтому указание имени столбца в функции count () вы можете использовать напрямую

SELECT users.id, COUNT( houses.sold_at )
FROM users LEFT JOIN houses on houses.user_id = users.id
GROUP BY users.id

, и вы не должны использовать имя столбца левого соединенияв противном случае это становится внутренним соединением ... для этого вы должны переместить условие в соответствующее предложение ON

0 голосов
/ 26 декабря 2018

Вы можете попробовать поставить условие where в предложении ON, как показано ниже:

1002 *
...