В приведенном ниже запросе перечислены все имена таблиц процедур и количество совпадающих результатов в таблице 1, а именно:
SELECT p.name, COUNT(t1.id) as Quantity
FROM procedures p
LEFT JOIN table1 t1
ON p.id = t1.id
GROUP BY p.name ASC
Как я могу сделать запрос выше, но сделать счет многих других таблиц? Представьте, что у меня есть еще 2 таблицы для подсчета, и запрос выводит такие столбцы:
Name Quantity1 Quantity2 Quantity3
A 0 100 27
B 10 0 15
C 50 200 1
Таблица процедур:
id name
1 A
2 B
3 C
Другие таблицы, которые я хочу подсчитать совпадающие результаты на основе процедур
table1, table2, table3...
id name
1 A
1 A
1 A
2 B
2 B
3 C
3 C
Лучшим способом, вероятно, является объединение до join
:
SELECT p.name, SUM(t1.cnt1) as cnt1
FROM procedures p LEFT JOIN
(SELECT t1.id, COUNT(*) as cnt1
FROM table1 t1
GROUP BY t1.id
) t1
ON p.id = t1.id
GROUP BY p.name ASC;
Хммм, вы все равно будете получать дубликаты, если name
и id
не 1-1. Если это проблема, то:
SELECT p.name, t1.cnt1 as cnt1
FROM (SELECT DISTINCT name
FROM procedures p
) p LEFT JOIN
(SELECT p.name, COUNT(*) as cnt1
FROM table1 t1 JOIN
procedures p
ON p.id = t1.id
GROUP BY p.name
) t1
ON p.name = t1.name;
Такой подход будет безопасно распространяться.
Присоединитесь к другим таблицам:
SELECT p.name,
COUNT(t1.id) as Quantity1,
COUNT(t2.id) as Quantity2,
COUNT(t3.id) as Quantity3
FROM procedures p
LEFT JOIN table1 t1 ON p.id = t1.id
LEFT JOIN table2 t2 ON p.id = t2.id
LEFT JOIN table3 t3 ON p.id = t3.id
GROUP BY p.name ASC