MySQL 将重复行计为一个

标签 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

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

最佳答案

好吧,您尝试的查询是一个好的开始。您需要一个子查询,在该子查询中您按项目 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 将重复行计为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36314289/

相关文章:

sql - 如何合并具有相同名称的列的多个表

sql - SQL中 "IF EXISTS"和 "IF NOT EXISTS"之间的区别?

sql - 如何在 SQL 查询中向 SQL Server 列添加加一 (+1)

sql - 是否可以生成动态 sql 以返回雪花中具有各种列的行

php - symfony 4 api 突然变得非常慢

javascript - 如何将数据添加到模式 PHP、MySQL Ajax

android - android中通过url传递多个参数并在PHP中获取

php - MySQL 中固定数量字符串的最佳实践?

mysql - 如何在 MySQL 中通过 select 语句创建表,保留编码和数据库引擎

mysql - 如何为Mysql 5.7选择具有这种结构的json列