Подсчет DISTINCT строк из нескольких соединенных таблиц в MySQL с предложением WHERE - PullRequest
0 голосов
/ 10 января 2019

У меня есть три таблицы: предприятия, проверки и нарушения. У меня есть следующий запрос:

SELECT b.id, b.name, b.address, b.city, b.state, b.type, i.date
FROM businesses AS b
RIGHT JOIN inspections i ON i.business_id = b.id
RIGHT JOIN (SELECT inspection_id FROM violations) AS v ON v.inspection_id = i.id
WHERE b.type = 'hospital' AND i.date BETWEEN "2019-01-01" AND "2019-01-03";

Я хочу выяснить, сколько различных нарушений (легко, это количество строк), проверок и предприятий, которые были возвращены в результате. Я пытался использовать COUNT и GROUP BY, но не смог заставить его работать.

Мне нужно что-то вроде:

table      | count
------------------
businesses | 10
inspections| 23
violations | 100

Любые указатели приветствуются.

1 Ответ

0 голосов
/ 10 января 2019

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

SELECT COUNT(DISTINCT b.id) AS businesses, 
       COUNT(DISTINCT i.id) AS inspections,
       COUNT(DISTINCT v.id) AS violations
FROM businesses AS b
INNER JOIN inspections AS i ON b.id = i.business_id AND i.date BETWEEN "2019-01-01" AND "2019-01-03"
LEFT JOIN violations AS v ON i.id = v.inspection_id
WHERE b.type = 'hospital'

Использование INNER JOIN вернет только количество предприятий, которые были проверены в течение этого диапазона дат. Если вы хотите подсчитать все предприятия, используйте OUTER JOIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...