MySql,统计多个组,并创建一个视图
MySql, Counting multiple groups, and creating a view
我的数据具有我可以假设的逻辑分组,但我一直无法弄清楚如何根据我的需要正确制作视图。我不拥有数据提供者,只是在读取数据库。我无法控制所提供的内容,我只需要提供一些计数
逻辑图
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)
第一列是正在使用的路由器。第二列是可用的路由器总数,第三列表示使用了多少。
我遇到的问题是,如果不为每个路由器构建 10 个子查询,我无法弄清楚如何针对每条路由执行此操作,其中涉及逻辑映射。
有没有更简洁的方法来做到这一点?如果需要更多数据,我会提供。
数据将每 10 秒更新一次,此时应使用路由器的 used/total 计数更新视图。我只关心计数,而不关心数据本身。
我想你想要条件聚合:
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;
我的数据具有我可以假设的逻辑分组,但我一直无法弄清楚如何根据我的需要正确制作视图。我不拥有数据提供者,只是在读取数据库。我无法控制所提供的内容,我只需要提供一些计数
逻辑图
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)
第一列是正在使用的路由器。第二列是可用的路由器总数,第三列表示使用了多少。
我遇到的问题是,如果不为每个路由器构建 10 个子查询,我无法弄清楚如何针对每条路由执行此操作,其中涉及逻辑映射。
有没有更简洁的方法来做到这一点?如果需要更多数据,我会提供。
数据将每 10 秒更新一次,此时应使用路由器的 used/total 计数更新视图。我只关心计数,而不关心数据本身。
我想你想要条件聚合:
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;