MySQL将重复行计为一个

时间:2016-03-30 16:13:55

标签: mysql sql

我需要帮助计算以下示例中的行

ProjectID ScriptID Browser Status
ABC       5001     Chrome  Pass
ABC       5002     FireFox Fail
ABC       5003     Chrome  Pass
ABC       5003     FireFox Pass
ABC       5004     Chrome  Pass
ABC       5004     FireFox Fail
ABC       5005     Chrome  Fail
ABC       5005     FireFox Fail

我想要的结果如下:

ProjectID Pass Fail
ABC        2    3

我尝试了以下查询,但这无法获得所需的结果:

SELECT projectID,
       SUM(CASE WHEN Status = '1' THEN 1 ELSE 0 END) AS Pass,
       SUM(CASE WHEN Status = '2' THEN 1 ELSE 0 END) AS Fail
FROM Results
GROUP BY ScriptID

简而言之,如果脚本在所有浏览器中传递,则将其计为Pass,如果在一个或所有浏览器中失败,则将其计为Fail。包括仅在单个浏览器上运行的脚本的通过或失败计数。可以在两个以上的浏览器中运行脚本。请协助。

1 个答案:

答案 0 :(得分:0)

嗯,您尝试的查询是一个良好的开端。您需要一个子查询,在该子查询中按项目ID和脚本ID进行分组,并确定传递的nemuber是否与该组中的记录数相同(通过),或者您至少有一个失败(失败)。然后在外部查询中,您只按项目ID分组,并在计算的通过和失败字段中总结结果:

SELECT ProjectID, sum(Pass), sum(Fail)
FROM 
    (SELECT ProjectID,
            ScriptID,
            IF(SUM(CASE WHEN Status = 'Pass' THEN 1 ELSE 0 END) = COUNT(*),1,0) AS Pass,
            IF(SUM(CASE WHEN Status = 'Fail' THEN 1 ELSE 0 END) > 0,1,0) AS Fail
     FROM Results
     GROUP BY ProjectID, ScriptID) t
GROUP BY ProjectID