我有一个表 Tabl1:id、姓名、国家、年份、奖牌。 如何根据 1 个请求中每年的奖牌数量找到前 10 个国家/地区?
谢谢:)
答案 0 :(得分:0)
在这里您可以获得每年排名前 10 的国家/地区:
select * from
(
select country,year,count(*),row_number() over (order by count(*) desc) as rn
from table
group by country, year
) tt
where tt.rn < 11
子查询对每个国家和年份的数据进行分组,并为您提供每个组的 count(),但同时它按 count(*) desc 对它们进行排序并给出每个组的行号(它使用row_number() 窗口函数) ,因此在每个组中获得奖牌最多的国家/地区位于顶部,并且每组中的行号 = 1,您需要前 10 名,因此您可以在主查询中过滤它们 tt.rn < 11。
答案 1 :(得分:0)
您没有告诉我们有关您的表架构或数据的任何信息,所以这是一个猜测!
假设您的 medal
列包含每个 Id/name 的奖牌数量,因此您只需要 rank
的奖牌数。类似的东西:
sum
答案 2 :(得分:0)
如果你想要 10 个国家每年:
with data as (
select country, "year" as yr,
rank() over (partition by "year" order by count(*) desc) as rnk
from T
group by country, "year"
)
select yr as "year", country from data
where rnk <= 10
order by yr, rnk;
请注意,如果可能出现并列,则任何给定年份都可能返回十多行。