Найдите второе место по зарплате в каждом отделе, используя rank / density_rank в улье - PullRequest
4 голосов
/ 18 марта 2019

Это были два вопроса, которые мне задавали во время собеседования, но единственное условие - использовать rank / dens_rank.

Найти второй по величине оклад в каждом отделе, используя rank / density_rank в улье.

  1. Когда в каждом отделе достаточно записей.
  2. Когда в нескольких отделах имеется только 1 запись.

Укажите, если это действительно такили нет.Если да, то какие запросы должны быть одинаковыми.

1 Ответ

3 голосов
/ 18 марта 2019

Если вам нужно выбрать всех сотрудников со вторым окладом, используйте фильтр

dense_rank() over(partition by department order by salary desc) = 2.Он вернет всех сотрудников со вторым окладом.

Когда в отделе есть только 1 запись (второго оклада нет, один сотрудник в отделе), он будет оценен как 1, и вы не получите никаких записей об этомфильтрация отделов по параметру dens_rank = 2.

Если вам нужно выбрать только одну запись (не всех сотрудников) со вторым окладом, то будет работать row_number() over(partition by department order by salary desc) = 2, но при случайном выборе будет выбран один случайный сотрудник со вторым окладом.сотрудники со второй зарплатой.Только одна запись будет помечена row_number = 2.

...