【问题标题】:Count based on group with filter基于带过滤器的组计数
【发布时间】:2017-09-08 10:48:48
【问题描述】:
我有一个显示 2 列的查询:“Device_ID”和“Status”。 Device_ID 是所有计算机的名称,status 包含“reboot”或“success”作为值。我想要第三列来计算该特定 Device_ID 有多少“成功”。
我该怎么做呢?
【问题讨论】:
标签:
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 ;