SQL Количество двух таблиц - PullRequest
       13

SQL Количество двух таблиц

0 голосов
/ 03 сентября 2018

У меня есть две таблицы SQL, одна называется X, а другая - Y. Таблица X имеет два столбца: название улицы и номер дома. Таблица Y также имеет две колонки: название улицы и номер дома.

Я пытаюсь создать запрос, который позволяет мне подсчитать, сколько раз встречается название определенной улицы, обычно это было бы очень просто.

Но при некоторых исследованиях уловка заключается в том, что если вы используете count (), когда в столбце нет экземпляров данной строки, она должна вернуть 0, но это не так. Любая помощь о том, как сделать count () в SQL возвращает 0 будет принята с благодарностью. В настоящее время, когда я запускаю запрос, он возвращает 1, даже если в таблице нет его экземпляров.

Текущий запрос:

SELECT b.wing,count(b.wing),count(a.wing)
FROM  residents as a, rooms as b
WHERE b.wing = ( "Wing" OR  "East" OR "Split")
GROUP BY b.wing

Результат

East      2     1
Split     1     1
West      1     1

Ожидаемый результат

East      2     0
Split     1     0
West      1     1

Текущий результат с текущим предлагаемым решением

East      1     1
Split     1     1
West      1     1

Проблема: 2-й столбец Split и East должен возвращать 0 (в таблице их нет)

Пример данных:

 residents
 name      wing    roomnum 
'justin', 'West', '400',     ( in this table there is only one entry)

 rooms
 wing    roomnum
 'East', '410', 
 'Split', '400', 
'West', '400', 
 'East', '400', 

1 Ответ

0 голосов
/ 03 сентября 2018

Было бы возвращено 0, если бы вы использовали предложение JOIN вместо перекрестного произведения двух таблиц. Если ваша таблица residents связана с другой через какой-либо из столбцов, используйте предложение LEFT JOIN, чтобы возвращались значения NULL для получения результатов 0.

Пример будет похож на:

SELECT b.wing,count(b.wing),count(a.wing)
FROM rooms as b
LEFT JOIN residents as a
    ON a.roomnum = b.roomnum
        AND a.wing = b.wing
WHERE b.wing IN ( "Wing", "East", "Split")
GROUP BY b.wing
...