SQL分组然后在一个查询中取消分组

时间:2010-12-17 17:51:51

标签: sql oracle group-by

嘿我试图做一个子查询,允许我通过分组得到一些东西,然后基本上取消分组,并根据我刚刚得到的数量选择一定数量的行。如果SQL允许类似contains()方法或类似的东西,那么这个查询基本上就是我想要的。

select cat, mouse
from pets
where cat = (select cat
             from pets
             group by cat
             having count(mouse) > 3);

有什么想法?使用oracle10g。

2 个答案:

答案 0 :(得分:5)

select cat, mouse
from pets
where cat in (select cat
         from pet
         group by cat
         having count(mouse) > 3);

将'='更改为'in' in关键字就是这样做的。

答案 1 :(得分:1)

使用子查询并不是非常错误,但使用分析函数的方法通常对这种自连接查询执行得更好。

select cat, mouse from
(
    select cat, mouse, count(mouse) over(partition by cat) as ct
) 
where ct = 3