写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
类似:
select
t.*
from (
select
tbl.*,
row_number() over(partition by country order by salary desc) rn
from
tbl
) t
where
t.rn = 2
最大的问题是您如何处理纽带。大概是第二高的工资。在这种情况下,您特别需要寻找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;