给表mytable
加上2列,如
| foo | bar |
| a | 10 |
| b | 10 |
| b | 15 |
| c | 10 |
| c | 10 |
| c | 10 |
| d | 10 |
| d | 45 |
| e | 20 |
如何返回仅 包含值foo
的{{1}}组?
上面的结果数据集应该看起来像
10
请注意,b和d不会返回,因为15和45也是这些组中的值。
答案 0 :(得分:3)
您可以使用group by
和having
:
select foo
from mytable
group by foo
having min(bar) = max(bar) and min(bar) = 10;
如果10
是最小值:
having max(bar) = 10
答案 1 :(得分:0)
您可以在此处使用存在逻辑:
SELECT DISTINCT foo
FROM yourTable t1
WHERE NOT EXISTS (SELECT 1 FROM yourTable t2 WHERE t2.foo = t1.foo AND t2.bar <> 10);
此查询应受益于以下索引:
CREATE INDEX idx ON yourTable (foo, bar);
答案 2 :(得分:0)
根据您的要求,您需要告知系统
以下是建议的代码:
select foo, bar from mytable
where
bar=10 and foo not in (select foo from mytable where bar <> 10)
group by foo