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

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


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

最佳答案

好吧,您尝试的查询是一个好的开始。您需要一个子查询,在其中您可以按项目ID和脚本ID进行分组,并确定通过的次数是否等于该组中的记录数(通过),或者您至少有一次失败(失败)。然后,在外部查询中,仅按项目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

关于mysql - MySQL将重复的行计为一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36314289/

10-11 02:41