如何提出请求?

时间:2021-03-29 16:29:31

标签: sql

我有一个表 Tabl1:id、姓名、国家、年份、奖牌。 如何根据 1 个请求中每年的奖牌数量找到前 10 个国家/地区?

谢谢:)

3 个答案:

答案 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;

请注意,如果可能出现并列,则任何给定年份都可能返回十多行。