MySql, подсчет нескольких групп и создание представления
У меня есть данные, которые имеют логическую группировку, которую я могу предположить, но я не смог понять, как сделать представление должным образом для моих нужд. У меня нет поставщика данных, я только читаю базу данных. Я не могу контролировать то, что предоставляется, мне просто нужно предоставить некоторые подсчеты
Логическая карта
name like "TL-3%" = MGrid_N53
name like "TL-P1%" = MGrid2_MGrid
name like "TL-P2%" = MGrid_MGrid2
и так далее, (10 групп)
Я хотел бы создать представление, которое говорит что-то вроде (маршрут будет = к отображенной логике выше, IE MGrid_N53)
select route,
(select count(*)
from table_name
where name like "Tl-3%"),
(select count(*)
from table_name
where name like "TL-3%" and source is not null)
1-й столбец - используемый маршрутизатор. 2-й столбец - общее количество доступных маршрутизаторов, 3-й столбец показывает, сколько используется.
У меня проблема в том, что я не могу понять, как это сделать, для каждого маршрута, с включенным логическим отображением, без создания 10 подзапросов для каждого маршрутизатора.
Есть ли более чистый способ сделать это? Если потребуется больше данных, я предоставлю.
Данные будут обновляться каждые 10 секунд, после чего представление должно обновляться с использованием использованного / общего количества для маршрутизатора. Я забочусь только о количестве, а не о самих данных.
1 ответ
Я думаю, что вы хотите условную агрегацию:
select (case when name like 'Tl-3%' then 'MGrid_N53'
when name like 'TL-P1%' then 'MGrid2_MGrid'
. . .
end) as route,
count(*) as num,
count(source) as num_withsource
from table_name
group by route;