如何选择属于最大群组的行?
假设我们有下表,有两个类别/组:Fruits
(较大的一个)和Vegetables
:
Name | Category
--------------------
Banana | Fruits
Orange | Fruits
Beetroot | Vegetables
如何编写只选择最大组中行的SQL?
Banana
Orange
答案 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