显示特定列值的SQL

时间:2014-10-28 23:21:42

标签: mysql sql

我不确定如何真正寻找这个......

假设我有一个像这样的简单表

ID     Type
1      0
1      1
2      1
3      0
4      0
4      1

如何选择所有类型均为0和1的ID?

3 个答案:

答案 0 :(得分:4)

SELECT id,type
FROM t
GROUP BY id 
HAVING SUM(type=0)>0
AND SUM(type=1)>0

您只需按ID分组,而不是使用后置聚合过滤来检查0和1。

答案 1 :(得分:2)

非常昂贵且查询无法按键。

SELECT ID FROM foo AS foo0 JOIN foo AS foo1 USING (ID) WHERE foo0.Type=0 AND foo1.Type=1 GROUP BY foo0.id.

答案 2 :(得分:1)

更通用的方法是在id列上为需要测试的每个值使用CASE列与GROUP BY结合使用。这意味着如果您有n个条件要测试,那么您将有一个列,指示是否满足给定ID的每个条件。然后HAVING条件变得微不足道,您可以像任何多列过滤器一样使用它,或者使用分组作为子查询,代码看起来更简单,逻辑变得更容易理解。

SELECT id, Type0,Type1 
FROM (
     SELECT id, 
       Type0 = max(CASE WHEN type = 0 THEN TRUE END)
       , Type1 = max(CASE WHEN type = 1 THEN TRUE END)
     FROM t
     GROUP BY id
     ) pivot
WHERE Type0 = TRUE and Type1 = TRUE