我必须制定 SQL 查询来显示总成功和失败的设备处理。 假设用户选择 2 个设备并运行一些进程。 用户触发的每个进程将产生 4 个作业(1 个设备有 2 个作业要运行)。由于这里用户选择了 2 个设备,因此 db 中有 4 条记录。现在,根据 ParentTaskId,我需要显示设备总数中成功、失败的作业总数。
只有当两个作业(类型 1、类型 2)都成功时,我们才将设备上的作业视为成功。
注意:如果jobtype 1失败,jobtype 2不会触发
Ex:
Case 1:
ParentTaskId DeviceId TaskType TaskStatus
101 a123 1 Success
101 a123 1 Success
101 a124 2 Success
101 a124 2 Success
Output :
ParentTaskId Success Failed TotalDevices
101 2 0 2
Case 2:
ParentTaskId DeviceId TaskType TaskStatus
101 a123 1 Success
101 a123 1 Success
101 a124 2 Failed
101 a124 2 Success
Output:
ParentTaskId Success Failed TotalDevices
101 1 1 2
尝试了以下方法但没有成功:
select
ParentTaskId,
COUNT(DISTINCT(DeviceId)),
count( case when TaskStatus='SUCCESS' then 1 end) as Success,
count( case when TaskStatus!='SUCCESS' then 1 end) as Failed
from XYZ
where ParentTaskId = '101'
group by ParentTaskId,DeviceId
对此有任何指示/建议吗?
答案 0 :(得分:0)
您可以使用两个级别的聚合 - 内部级别用于获取每个父级和设备的状态。为此,您实际上可以使用 min(taskStatus)
来获取状态:
select ParentTaskId,
sum(case when taskStatus = 'Success' then 1 else 0 end) as success,
sum(case when taskStatus = 'Failed' then 1 else 0 end) as failed,
count(*) as total
from (select ParentTaskId, deviceId, min(taskStatus) as taskStatus
from t
group by ParentTaskId, deviceId
) pd
group by ParentTaskId;