SQL: средняя зарплата и порядок сотрудников через CASE

Среднюю зарплату по должности вычислите через AVG OVER, затем задайте специальный порядок CASE: JAMES первым, FORD последним, остальные по ENAME DESC.

Короткий ответ

Что ответить на собеседовании

Среднюю зарплату по должности вычислите через AVG OVER, затем задайте специальный порядок CASE: JAMES первым, FORD последним, остальные по ENAME DESC.

Подробный разбор

Ответ с пояснениями

Условие

-- Даны две таблицы EMP - список сотрудников и зарплат, DEPT - список подразделений -- 1) Написать запрос, возвращающий имя (ENAME), подразделение (DNAME), должность (JOB) -- и на сколько зарплата работника (SAL) отличается от средней для его должности. -- 2) Отсортировать полученный результат так, чтобы сотрудник с именем JAMES был на первой строчке, -- FORD на последней, а все остальные сотрудники отсортированы по имени в обратном алфавитном порядке.

Ответ

Среднюю зарплату по должности вычислите через AVG OVER, затем задайте специальный порядок CASE: JAMES первым, FORD последним, остальные по ENAME DESC.

Предположим, таблицы связаны по DEPTNO, а DEPTNO уникален в DEPT:

SELECT e.ename, d.dname, e.job,
       e.sal - AVG(e.sal) OVER (PARTITION BY e.job) AS salary_difference
FROM emp e
LEFT JOIN dept d ON d.deptno = e.deptno
ORDER BY CASE
             WHEN e.ename = 'JAMES' THEN 0
             WHEN e.ename = 'FORD' THEN 2
             ELSE 1
         END,
         e.ename DESC;

Положительная разница означает зарплату выше среднего по должности. LEFT JOIN сохраняет сотрудников без найденного отдела. Если имена повторяются, все JAMES и FORD попадут в соответствующие группы; для однозначного порядка добавьте уникальный идентификатор.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее