使用SQL从最大组中选择行

时间:2016-04-18 13:50:59

标签: sql postgresql

如何选择属于最大群组的行?

假设我们有下表,有两个类别/组:Fruits(较大的一个)和Vegetables

Name     | Category
--------------------
Banana   | Fruits
Orange   | Fruits
Beetroot | Vegetables

如何编写只选择最大组中行的SQL?

Banana
Orange

2 个答案:

答案 0 :(得分:3)

以下是Oracle的答案:

select *
from mytable
where category = (select stats_mode(category) from mytable);

这只会让你获得一个类别。因此,如果出现平局,您可以随意获得其中一个最大计数的类别。

以下是DBMS不支持STATS_MODE但具有标准SQL窗口函数的答案:

select name, category
from
(
  select name, category, rank() over (order by cnt desc) as rnk
  from
  (
    select name, category, count(*) over (partition by category) as cnt
    from mytable
  ) counted
) ranked
where rnk = 1;

使用RANK,您可以获得具有最大数量的所有类别。如果您只想要其中一个,请将category添加到ORDER BY。 (感谢dnoeth的纠正。)

答案 1 :(得分:0)

我想出来了(对于PostgreSQL):

with mytable_count as (
  select category, count(category) as category_count
  from mytable
  group by category
  order by category_count desc
  limit 1
)
select mytable.*
from mytable, mytable_count
where mytable.category = mytable_count.category