mysql - 在 MySQL 中使用 GROUP BY 选择具有同一列的两个条件的行的最佳方法是什么?

标签 mysql group-by having

TABLE
id   |   result
==================
1    |   SUCCESS
2    |   FAIL
2    |   SUCCESS
3    |   FAIL
3    |   FAIL
3    |   SUCCESS
4    |   FAIL
5    |   FAIL
5    |   FAIL

我想选择那些至少有一个“FAIL”但没有“SUCCESS”的 ID。在本例中,只应选择 id = 4 和 id = 5。

这个查询似乎不起作用,因为 HAVING 没有聚合任何东西:

SELECT id, result FROM table WHERE result = 'FAIL' GROUP BY id HAVING 结果!= 'SUCCESS'

有谁知道如何在不使用 IN 子句的情况下做到这一点?

最佳答案

SELECT 
    id
    , sum(if(result='SUCCESS', 1, 0)) as cnt_succ
    , sum(if(result='FAIL', 1, 0))    as cnt_fail
FROM 
    table 
GROUP BY
    id
HAVING
    cnt_fail>0 and cnt_succ=0

关于mysql - 在 MySQL 中使用 GROUP BY 选择具有同一列的两个条件的行的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41811131/

相关文章:

mysql - 无法使用 Servlet 连接到 MySQL 数据库

mysql - 我可以在 where 中选择 Distinct 并在 mysql 中获取所有选择吗?

SQL选择连续运行数据的最大值

mysql 选择不同的逗号分隔值

mysql - 是否可以将 COUNT() 与 SELECT in HAVING 子句的单个结果进行比较?

mysql - MySQL 是否消除了 SELECT 和 HAVING/GROUP BY 子句之间的公共(public)子表达式

python - Mysql查询查找每个月年的计数(id)

java - 无法将 Java ap 连接到在线 MySQL 数据库 - 错误的 URL

php - 计算并存储另一个表中列的 SUM

mysql - 从不同的相关记录组中选择两列之一中包含重复值的所有行