Напишите SQL & запрос Hive, чтобы напечатать год, в котором была выплачена вторая самая высокая зарплата для каждой страны? - PullRequest
0 голосов
/ 01 марта 2020

Напишите 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

Ответы [ 2 ]

1 голос
/ 01 марта 2020

что-то вроде:

select 
    t.*
from (
    select
        tbl.*,
        row_number() over(partition by country order by salary desc) rn
    from 
        tbl
) t
where 
    t.rn = 2
0 голосов
/ 01 марта 2020

Большой вопрос, как вы справляетесь с галстуками. Предположительно, вы имеете в виду вторую самую высокую отличную зарплату. В этом случае вы специально ищете оконную функцию 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;
...