MySQL GROUP BY仅为所有匹配WHERE子句

时间:2016-10-31 22:11:13

标签: mysql

我需要得到一个数字列表,其中所有行的完成次数= 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

3 个答案:

答案 0 :(得分:3)

您可以使用这样的聚合:

SELECT number
FROM yourTable
GROUP BY number
HAVING MIN(finished) = 1

我认为finished只能是01

答案 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)