Ответ
Приходилось писать запросы от средней до высокой сложности, включая:
- Сложные JOIN: INNER, LEFT/RIGHT OUTER, CROSS JOIN для связей между множеством таблиц.
- Агрегатные функции и группировка:
SUM(),COUNT(),AVG()сGROUP BYиHAVING. - Подзапросы: Коррелированные и некоррелированные подзапросы в
SELECT,FROM,WHERE. - Оконные функции (Window Functions): Для аналитики без свёртки строк.
- Общие табличные выражения (CTE): В том числе рекурсивные CTE для работы с иерархическими данными.
- Оптимизация: Анализ плана выполнения (EXPLAIN), создание и использование индексов для ускорения запросов.
Пример сложного запроса с оконной функцией и подзапросом:
WITH DepartmentStats AS (
SELECT
department_id,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
)
SELECT
e.employee_id,
e.name,
e.salary,
e.department_id,
ds.avg_salary,
RANK() OVER (PARTITION BY e.department_id ORDER BY e.salary DESC) as salary_rank_in_dept
FROM employees e
JOIN DepartmentStats ds ON e.department_id = ds.department_id
WHERE e.salary > ds.avg_salary
ORDER BY e.department_id, salary_rank_in_dept;
Этот запрос находит сотрудников, чья зарплата выше средней по их отделу, и ранжирует их внутри отдела.