Как вы оцениваете свой уровень знания SQL?

«Как вы оцениваете свой уровень знания SQL?» — вопрос из категории Софт-скиллы, который задают на 34% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Я оцениваю свой уровень как продвинутый (Senior/Expert). SQL — это мой основной инструмент для работы с данными на протяжении многих лет.

Мой опыт включает:

  • Сложные запросы: Регулярное использование CTE (WITH), рекурсивных запросов, оконных функций (ROW_NUMBER(), RANK(), LAG/LEAD, агрегаты с OVER(PARTITION BY ...)).
  • Оптимизация: Анализ и улучшение производительности через EXPLAIN ANALYZE, создание и управление индексами (B-tree, частичные, составные), понимание планов выполнения.
  • Проектирование: Участие в проектировании схем БД, нормализация/денормализация, написание DDL (CREATE/ALTER TABLE).
  • Работа в production: Написание и поддержка ETL/ELT-процедур, триггеров, представлений (VIEW) и материализованных представлений.

Пример решения нетривиальной задачи:

-- Найти сотрудников, чья зарплата выше средней по их отделу за последние 3 месяца
WITH dept_avg_salary AS (
    SELECT
        department_id,
        AVG(salary) AS avg_salary_last_3m
    FROM employees e
    JOIN salary_payments sp ON e.id = sp.employee_id
    WHERE sp.payment_date >= CURRENT_DATE - INTERVAL '3 months'
    GROUP BY department_id
)
SELECT
    e.id,
    e.name,
    e.department_id,
    e.salary,
    das.avg_salary_last_3m
FROM employees e
JOIN dept_avg_salary das ON e.department_id = das.department_id
WHERE e.salary > das.avg_salary_last_3m
ORDER BY e.department_id, e.salary DESC;

Я свободно работаю с разными диалектами (PostgreSQL, MySQL, MS SQL Server) и понимаю их специфику. Для меня SQL — не просто инструмент извлечения данных, а язык для декларативного описания бизнес-логики на уровне базы данных.