Group By与多个拥有相同的字段

时间:2014-09-02 18:06:38

标签: mysql sql group-by having

示例表:

a | b
-----
1 | 1
1 | 2
2 | 1
3 | 0
3 | 1
4 | 1
4 | 2
4 | 3
5 | 0

我想获得列DISTINCT的所有a值,这些值与列b中的值相关联,其中b = 1 AND b = 2

结果应为:

a
-
1
4

这适用于GROUP BY吗?我尝试了以下SQL,但它总是给出0结果:

SELECT t.a
FROM table t
GROUP BY t.a, t.b
HAVING t.b = 1 AND t.b = 2

MySQL似乎在同一行调用AND语句,而不是在分组的b行上调用。

有什么想法吗? :)

4 个答案:

答案 0 :(得分:2)

你非常接近。试试这个:

SELECT t.a
FROM table t
GROUP BY t.a
HAVING SUM(t.b = 1) > 0 AND SUM(t.b = 2) > 0;

每个SUM()条件计算条件为真的行数。你想要两者,因此> 0AND

编辑已从t.b

中删除GROUP BY

答案 1 :(得分:1)

这样做的一种方法如下:

SELECT t.a
FROM table t
GROUP BY t.a
HAVING SUM(CASE WHEN b=1 THEN 1 ELSE 0 END) <> 0
   AND SUM(CASE WHEN b=2 THEN 1 ELSE 0 END) <> 0

请注意,您需要从t.b删除GROUP BY,否则结果将不正确。

Demo.

答案 2 :(得分:1)

这应该可以解决问题:

SELECT t.a
FROM table t
WHERE (t.b = 1 OR t.b = 2)
GROUP BY t.a
HAVING COUNT(t.a) > 1

答案 3 :(得分:0)

你可以简单地使用这样的子查询:

select a from t where b=1 and a in (select a from t where b=2);