@maks78945

Как получить количество из нескольких таблиц?

Доброго времени суток!
У меня есть 4 таблицы (tab1, tab2, tab3, tab4) в каждой таблице есть колонка type (в которой указаны type1, type2, type3). Мне необходимо получить количество каждого типа во всех табличках:

type1 | type2 | type3
-------------------------
2 | 12 | 345

Для одного типа у меня получилось реализовать это, но как соединить всё это в один запрос?
Вот запрос с помощью которого у меня получилось получить количество по одному типу:
SELECT SUM(type1) AS type1 FROM (

SELECT COUNT(*) AS type1 FROM tab1 AS t1 WHERE t1.type='type1' AND t1.date between '2020-01-01' AND '2020-08-15'
UNION
SELECT COUNT(*) AS type1 FROM tab2 AS t2 WHERE t2.type='type1' AND t2.date between '2020-01-01' AND '2020-08-15'
UNION
SELECT COUNT(*) AS type1 FROM tab3 AS t3 WHERE t3.type='type1' AND t3.date between '2020-01-01' AND '2020-08-15'

) AS t
  • Вопрос задан
  • 28 просмотров
Решения вопроса 1
LaRN
@LaRN
Senior Developer
В вашем варианте нужно осторожнее с union быть, он выкидывает дубли, т.е. если все три запроса вернут например число 5, то результат вычисления вместо 15 будет 5. Чтобы оставить дубли, нужно использовать union all.
Если прямо в лоб решать вашу задачу, то можно так попробовать:
SELECT [type], count(1) AS cnt FROM (
SELECT [type] FROM tab1 AS t1 WHERE t1.date between '2020-01-01' AND '2020-08-15'
UNION ALL
SELECT [type] FROM tab2 AS t2 WHERE t2.date between '2020-01-01' AND '2020-08-15'
UNION ALL
SELECT [type] FROM tab3 AS t3 WHERE t3.date between '2020-01-01' AND '2020-08-15'
) AS t
group by [type]

Но если в таблицах много записей, то это может долго работать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы