计算一列中的不同值,同时对不同的列值进行总计和分组

时间:2018-12-02 04:42:50

标签: mysql

我们有一张表格,其中包含来自不同节点的数据,其中一列的状态报告为“符合或不符合”,示例数据如下

Sample Data

我想以某种方式过滤表,如果节点上的任何检查显示不符合要求,则应将其标记为不符合,其余标记为符合。使用下面的查询,我能够做到

SELECT COUNT()AS总节点数,SUM(完全兼容= 0)AS非_兼容节点,SUM(完全兼容= 1)AS兼容节点FROM(选择节点,当SUM(Status ='Compliant')= COUNT()然后从your_table GROUP BY Node完全兼容1个ELSE 0 END

Current Output

现在,我想按如下所示按部门对结果进行分组和拆分,我该如何实现

Expected Result

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找这个:

select    dept,
          count(*) as total_nodes,
          sum(case when non_compliant_chk = 0 then 1 else 0 end) as compliant_nodes,
          sum(case when non_compliant_chk > 0 then 1 else 0 end) as non_compliant_nodes
from      (
            select    dept,
                      node,
                      sum(case when 'Non-Compliant' then 1 else 0 end) as non_compliant_chk
            from      your_table
            group by  dept,
                      node
          ) v
group by  dept;

答案 1 :(得分:0)

只需对Brian的建议进行一些修改,我就能获得所需的结果

选择dept,           count(*)为total_nodes,           sum(non_compatible_chk = 0然后1否则0结束的情况)作为Compliance_nodes,           总和(当non_compatible_chk> 0时为1,否则0结束)为non_compatible_nodes 来自(             选择dept,                       node,                        COUNT(当Compliance-Status ='Non- Compliant THEN 1 END'时的情况)'non_compatible_chk'             从表WHERE DOR> = DATE(NOW())-间隔7天             按Dept分组,                       Node           )v 按Dept分组;