> Как написать запрос с использованием CTE в SQL (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Нетология
Стек: Go
> Пример ответа
CTE (Common Table Expression) - это временный именованный набор результатов, который можно использовать внутри основного SQL-запроса. Он упрощает чтение и поддержку сложных запросов, особенно при работе с иерархическими данными или многократным использованием одного подзапроса.
Пример: допустим, у нас есть таблица orders (заказы) и нужно найти клиентов, чья сумма заказов превышает 1000. Без CTE пришлось бы писать вложенный запрос, а с CTE код становится чище:
SQLWITH high_value_customers AS (SELECT customer_id, SUM(amount) AS total_spentFROM ordersGROUP BY customer_idHAVING SUM(amount) > 1000)SELECT c.name, h.total_spentFROM customers cJOIN high_value_customers h ON c.id = h.customer_id;
В Go (например, с использованием database/sql и драйвера PostgreSQL) такой запрос выполняется как обычный Query:
GOrows, err := db.Query(`WITH high_value_customers AS (SELECT customer_id, SUM(amount) AS total_spentFROM ordersGROUP BY customer_idHAVING SUM(amount) > 1000)SELECT c.name, h.total_spentFROM customers cJOIN high_value_customers h ON c.id = h.customer_id`)
CTE также поддерживает рекурсию (ключевое слово RECURSIVE), что полезно для обхода деревьев или графов, например, структуры категорий.
> Похожие задачи по backend
Что такое embedding
Что такое protobuf и как он используется в gRPC
В чем преимущество PostgreSQL перед MongoDB
Приходилось ли работать с асинхронностью
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью