sqlite3 db表包含具有两列的设备perf数据.. device和value。
内容是这样的
deviceA|50 deviceB|75 deviceA|125 deviceB|25 deviceA|99 deviceB|10 deviceA|101 and on and on
对于每个设备
这是我目前的查询
select distinct(total.device),
total.count,
overthreshold.count,
round(((total.count*1.0 - overthreshold.count)/total.count),4)*100
from
(select device,count(*) as count from perfdata group by device) as total
inner join (
select device,count(*) as count from perfdata where value>100 group by device
) as overthreshold
group by overthreshold.device;
仅包含deviceA的结果
deviceA|2017|16|99.21
deviceA在表格中有2017个条目,其中16个是> 100;门槛低于99.21%。
对于所有设备/值组合,输出当前仅显示那些超出阈值,因为我的查询告诉它。
deviceB永远不会超过阈值,不在查询输出中(100%低于阈值)。
关于我在
中添加的位置/方式的任何建议 select device,count(*) as count from perfdata where value<100 group by device
获取欠限阈值的语句返回包含在我的计算中?
感谢您的帮助。
答案 0 :(得分:1)
您想要使用条件聚合。您可以在此处使用case
语句以及聚合函数:
select device, count(*) as TotalCount,
sum(case when value > 100 then 1 else 0 end) as OverThreshhold,
sum(case when value < 100 then 1 else 0 end) as UnderThreshhold,
100.0 * avg(case when value < 100 then 1.0 else 0.0 end) as PercentageUnder
from perfdata
group by device;