@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
  • Вопрос задан
  • 27 просмотров
Решения вопроса 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]

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

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

Войти через центр авторизации
Похожие вопросы
от 100 000 до 180 000 ₽
Кенарий Санкт-Петербург
от 120 000 до 300 000 ₽
от 90 000 до 110 000 ₽
29 сент. 2020, в 01:42
5000 руб./за проект
28 сент. 2020, в 22:46
1500 руб./за проект
28 сент. 2020, в 22:42
5000 руб./за проект