编写SQL&Hive查询以打印每个国家第二高薪的年份?

问题描述 投票:0回答:2

写SQL和HIVE查询以打印每个国家第二高薪的年份?。

请提供下表查询

country,salary,year
india,1000,2017
japan,2000,2017
germany,1500,2017
india,1250,2018
japan,500,2018
china,955,2017
japan,850,2019
china,1150,2018
india,1250,2019
sql hive hiveql greatest-n-per-group
2个回答
1
投票

类似:

select 
    t.*
from (
    select
        tbl.*,
        row_number() over(partition by country order by salary desc) rn
    from 
        tbl
) t
where 
    t.rn = 2

0
投票

最大的问题是您如何处理纽带。大概是第二高的工资。在这种情况下,您特别需要寻找dense_rank()窗口功能:select t.* from (select t.*, dense_rank() over (partition by country order by salary desc) as seqnum from t ) t where t.seqnum = 2;

现在,这样做的挑战在于,如果发生平局,它可能返回不止一行。如果您特别想要一行,则:

select t.* from (select t.*, dense_rank() over (partition by country order by salary desc) as ranking, row_number() over (partition by country, salary order by country) as seqnum from t ) t where t.ranking = 2 and seqnum = 1;

© www.soinside.com 2019 - 2024. All rights reserved.