示例表:
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
行上调用。
有什么想法吗? :)
答案 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()
条件计算条件为真的行数。你想要两者,因此> 0
和AND
。
编辑已从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
,否则结果将不正确。
答案 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);