我需要得到一个数字列表,其中所有行的完成次数= 1。 例如,正确的列表在这里:2,5
id | number | finished
-------------------------
0 | 1 | 0
1 | 2 | 1
2 | 2 | 1
3 | 3 | 0
4 | 3 | 1
5 | 3 | 1
6 | 4 | 1
7 | 4 | 0
8 | 4 | 0
9 | 5 | 1
此查询不起作用:
SELECT numbers
WHERE finished = 1
GROUP BY number;
结果是2,3,4,5
,因为一行会匹配,但只需要一个数字的所有行匹配时的数字。
//编辑
答案中的代码运作良好,但现在我有一个新的但几乎相同的问题。 现在我要用2列过滤什么
id | number | finished | fixed
-------------------------------
0 | 1 | 0 | 1
1 | 2 | 1 | 1
2 | 2 | 1 | 1
3 | 3 | 1 | 0
4 | 3 | 1 | 1
5 | 3 | 1 | 1
6 | 4 | 1 | 1
7 | 4 | 0 | 0
8 | 4 | 0 | 1
9 | 5 | 1 | 1
所需的结果是:number = 2,5
现在where子句必须是WHERE finished = 1 AND fixed = 1
答案 0 :(得分:3)
您可以使用这样的聚合:
SELECT number
FROM yourTable
GROUP BY number
HAVING MIN(finished) = 1
我认为finished
只能是0
或1
。
答案 1 :(得分:1)
像这样的东西(我没有把它吹过)
SELECT number WHERE finished = 1 GROUP BY number having count(number) = sum(finished)
答案 2 :(得分:1)
您所做的是选择其中至少有一个完成的所有数字= 1
如果你想要所有,你需要使用类似的东西:
SELECT distinct number FROM myTable WHERE finished = 1 and number not in
(select number FROM myTable where finished <> 1)