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;
Другие вопросы по тегам