SQL CTE
Интерактивное демо «SQL CTE» — раздел Энциклопедия · Данные и разметка.
Общие табличные выражения (CTE)
Цепочка WITH и рекурсивный обход иерархии — промежуточные результаты на каждом шаге
WITH базовые_данные AS (
SELECT employee_id, employee_name, department_id, salary
FROM employees WHERE status = 'active'
)
, данные_отделов AS (
SELECT d.department_id, d.department_name,
COUNT(b.employee_id) AS employee_count
FROM departments d
LEFT JOIN базовые_данные b ON d.department_id = b.department_id
GROUP BY d.department_id, d.department_name
)
, расчеты_зарплат AS (
SELECT b.*, AVG(b.salary) OVER (PARTITION BY b.department_id) AS avg_dept_salary,
b.salary - AVG(b.salary) OVER (PARTITION BY b.department_id) AS diff_from_avg
FROM базовые_данные b
)
SELECT r.employee_name, d.department_name, r.salary,
r.avg_dept_salary, r.diff_from_avg
FROM расчеты_зарплат r
JOIN данные_отделов d ON r.department_id = d.department_id
ORDER BY r.diff_from_avg DESC
→→→
Финальный результат · строк: 6
| employee_name | department_name | salary | avg_dept_salary | diff_from_avg |
|---|---|---|---|---|
| Дина | Продажи | 105000 | 96500 | 8500 |
| Анна | Разработка | 95000 | 88500 | 6500 |
| Вера | Аналитика | 71000 | 69500 | 1500 |
| Глеб | Аналитика | 68000 | 69500 | -1500 |
| Борис | Разработка | 82000 | 88500 | -6500 |
| Жанна | Продажи | 88000 | 96500 | -8500 |