Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL将重复行计数为一行_Mysql_Sql - Fatal编程技术网

MySQL将重复行计数为一行

MySQL将重复行计数为一行,mysql,sql,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

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

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

那么,您尝试的查询是一个良好的开始。您需要一个子查询,在该子查询中,您可以按项目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

你有没有写过这样的代码?堆栈溢出不是代码编写服务。您可以按
ScriptID
分组;我有一个没有得到期望结果的查询。按ScriptId从结果组中选择projectID、SUM(状态为'1'时的案例,然后选择1 ELSE 0 END)作为通过,SUM(状态为'2'时的案例,然后选择1 ELSE 0 END)作为失败。您是否编写了执行此操作的代码?堆栈溢出不是代码编写服务。您可以按
ScriptID
分组;我有一个没有得到期望结果的查询。按ScriptID从结果组中选择projectID、SUM(状态为'1'时的案例,然后选择1 ELSE 0 END)作为通过,SUM(状态为'2'时的案例,然后选择1 ELSE 0 END)作为失败