Hardcte

Что такое CTE (Common Table Expression)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

CTE — временный именованный результат внутри запроса, задаётся через WITH. Улучшает читаемость сложных запросов и поддерживает рекурсию.

WITH active_users AS (
  SELECT id, name FROM users WHERE active = true
),
user_orders AS (
  SELECT user_id, COUNT(*) AS cnt
  FROM orders
  GROUP BY user_id
)
SELECT a.name, COALESCE(o.cnt, 0) AS orders
FROM active_users a
LEFT JOIN user_orders o ON a.id = o.user_id;

Рекурсивное CTE (WITH RECURSIVE) — для обхода деревьев и графов (например, все потомки категории). Альтернатива — derived tables в FROM и views (сохраняются в схеме).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.