sqlite3从单个表连接查询

时间:2014-05-31 17:48:46

标签: sql sqlite

sqlite3 db表包含具有两列的设备perf数据.. device和value。

内容是这样的

deviceA|50
deviceB|75
deviceA|125
deviceB|25
deviceA|99
deviceB|10
deviceA|101
and on and on

对于每个设备

  1. 我想知道表中有多少条目(总计)
  2. 我想知道mnay条目超过阈值100(超过阈值)
  3. 我想知道有多少条目的门槛低于100(低于阈值)
  4. 我想知道阈值(百分比)下总条目的百分比
  5. 这是我目前的查询

        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
    
    获取欠限阈值的

    语句返回包含在我的计算中?

    感谢您的帮助。

1 个答案:

答案 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;