Объединить топ и присоединиться к SQL - PullRequest
0 голосов
/ 22 октября 2018

У меня есть две таблицы.Один для сотрудников

LAST_NAME                     SALARY DEPARTMENT_ID
------------------------- ---------- -------------
Vargas                          2500            50
Zlotkey                        10500            50
Abel                           11000            80
Taylor                          8600            80

Один для названия отдела

DEPARTMENT_ID DEPARTMENT_NAME               
------------- ------------------------------
50            Shipping
80            Sales

Я хочу выбрать первых трех сотрудников, которые имеют максимальную зарплату в таблице сотрудников. После получения я хочу получитьих название отделаВ результате вот так.

LAST_NAME                     SALARY DEPARTMENT_NAME
------------------------- ---------- -------------
Abel                          11000       Sales
Zlotkey                       10500       Shipping
Taylor                         8600       Sales

Я должен был попробовать это:

SELECT last_name, salary, department_id, ROWNUM as RANK
FROM (SELECT last_name, salary, department_id
FROM employees
ORDER BY salary DESC)
WHERE ROWNUM <= 3;

Но я не знаю, как использовать объединение, чтобы получить имя_подразделения.

Платформа:windows10

SQL версия разработчика: 18.01

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

попробуйте

select top(3)LAST_NAME, SALARY, DEPARTMENT_NAME 
from employees e
inner join  department  d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
where d.DEPARTMENT_NAME = 'sales'
order by SALARY desc
0 голосов
/ 22 октября 2018

Вы можете сделать это с помощью оконных функций:

select e.last_name, e.salary, d.department_name
from (select e.*, max(sum_salary) over () as max_sum_salary

      from (select e.*, sum(e.salary) over (partition by department_id) as sum_salary
            from employees e
            ) e
     ) e join
     department d
     on e.department_id = d.department_id
where max_sum_salary = sum_salary
0 голосов
/ 22 октября 2018

Вы можете сделать JOIN с подзапросом:

SELECT e.LAST_NAME, e.SALARY, d.DEPARTMENT_NAME
FROM employees e INNER JOIN
     department d
     ON d.DEPARTMENT_ID = e.DEPARTMENT_ID
WHERE e.DEPARTMENT_ID = (SELECT e1.DEPARTMENT_ID
                         FROM employees e1
                         ORDER BY e1.SALARY DESC
                         FETCH FIRST 1 ROWS ONLY
                        );

РЕДАКТИРОВАТЬ: Если вы хотите только три сотрудника, то вы можете сделать:

SELECT e.LAST_NAME, e.SALARY, d.DEPARTMENT_NAME
FROM employees e INNER JOIN
     department d
     ON d.DEPARTMENT_ID = e.DEPARTMENT_ID
ORDER BY e.SALARY DESC
FETCH FIRST 3 ROWS ONLY
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...