在 MySQL 中使用 GROUP BY 对同一列具有两个条件的 select 行的最佳方法是什么?
What is the best way to select rows with two conditions of the same column using GROUP BY in MySQL?
TABLE
id | result
==================
1 | SUCCESS
2 | FAIL
2 | SUCCESS
3 | FAIL
3 | FAIL
3 | SUCCESS
4 | FAIL
5 | FAIL
5 | FAIL
我想要 select 那些至少有一个 'FAIL' 而没有 'SUCCESS' 的 ID。在这个例子中,只有 id = 4 和 id = 5 应该 selected.
这个查询似乎不起作用,因为 HAVING 没有聚合任何东西:
SELECT id, 结果来自 table WHERE result = 'FAIL' GROUP BY id HAVING result != '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
TABLE id | result ================== 1 | SUCCESS 2 | FAIL 2 | SUCCESS 3 | FAIL 3 | FAIL 3 | SUCCESS 4 | FAIL 5 | FAIL 5 | FAIL
我想要 select 那些至少有一个 'FAIL' 而没有 'SUCCESS' 的 ID。在这个例子中,只有 id = 4 和 id = 5 应该 selected.
这个查询似乎不起作用,因为 HAVING 没有聚合任何东西:
SELECT id, 结果来自 table WHERE result = 'FAIL' GROUP BY id HAVING result != '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