【问题标题】:Count based on group with filter基于带过滤器的组计数
【发布时间】:2017-09-08 10:48:48
【问题描述】:

我有一个显示 2 列的查询:“Device_ID”和“Status”。 Device_ID 是所有计算机的名称,status 包含“rebo​​ot”或“success”作为值。我想要第三列来计算该特定 Device_ID 有多少“成功”。

我该怎么做呢?

【问题讨论】:

  • Edit您的问题并添加一些示例数据和基于该数据的预期输出。 Formatted textno screen shotsedit 您的问题不要在 cmets 中发布代码或其他信息。
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?

标签: sql filter count group-by


【解决方案1】:
SELECT tgt.Device_ID, tgt.Status, src.cnt
FROM [TableName] tgt
INNER JOIN 
(
Select Device_ID, count(CASE WHEN Status = 'SUCCESS' THEN 1 ELSE 0END) cnt
from [TableName] 
GROUP BY Device_ID
) src
ON tgt.Device_ID= src.Device_ID;

【讨论】:

    【解决方案2】:
    SELECT A.Device_ID,A.Status,B.Count_of_Success_per_Device_ID
      FROM Yourtable A
    INNER JOIN 
    (    
    SELECT Device_ID,
               SUM( CASE WHEN Status = 'Success' THEN 1 ELSE 0 END ) AS Count_of_Success_per_Device_ID
          FROM Yourtable
         GROUP BY Device_ID
    ) B
    ON A.Device_ID = B.Device_ID ; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 2020-01-18
      • 1970-01-01
      • 2016-11-03
      • 2022-08-19
      • 2019-10-14
      • 1970-01-01
      相关资源
      最近更新 更多