Sql 如何提出请求?

Sql 如何提出请求?,sql,Sql,我有一张表格1:身份证、姓名、国家、年份、奖牌。 我如何在一次申请中找到每年奖牌数量最多的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 子查询按国家和年份对数据进行分

我有一张表格1:身份证、姓名、国家、年份、奖牌。 我如何在一次申请中找到每年奖牌数量最多的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

子查询按国家和年份对数据进行分组,并给出每个组的计数,但同时它按计数*描述对数据进行排序,并使用“行数”窗口函数给出每个组的行数,因此每个年度奖牌最多的国家位于顶部,每个组中的行数=1,需要排名前10,因此,您在主查询中过滤它们tt.rn<11。

您还没有告诉我们有关表架构或数据的任何信息,因此这是一个猜测

假设您的奖牌列包含每个Id/姓名的奖牌数量,因此您只需要根据奖牌总数进行排名。大致如下:

select [year], country, [Rank] from (
    select [year], country, Rank() over(partition by [year] order by Sum(medal) desc ) [Rank]
    from Tabl1
    group by [year],country
)x
where [Rank]<=10
order by [year], [Rank]
如果您想要每年10个国家/地区:


请注意,如果可能的话,这可能会在任何给定年份返回超过十行。

您尝试过什么?你研究过如何汇总和分组吗?你的数据库管理系统和它的版本是什么?哦,当然,我能做的是:按奖牌数量和每年的奖牌数量找出前10个国家。但是我不能一起使用SQL Server Management Studio 15.0.18369.0哇,谢谢:但是奖牌是NVARCHAR 100。看着你的决定,我明白我还有很多东西要学:好的,在这种情况下,你可以用count代替sum谢谢:这个解决方案我很清楚。但我不明白为什么它不起作用。你想要每年10个还是总共10个?@Viki,这就是为什么你需要提供样本数据和期望的输出
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;