Зарегистрируйтесь, чтобы продолжить обучение

Common Table Expression и Конструкция WITH Продвинутые SQL-запросы

Конструкция Common Table Expressions (CTE) создает именованную временную таблицу, которая может быть использована в подзапросах, объединениях, агрегатных функциях и других операциях.

Преимущество использования CTE заключается в возможности переиспользования подзапросов и создании более читаемого и удобного для понимания кода.

Предположим, у нас есть таблица с продажами товаров и таблица с покупателями

sales

customer_id product_id sale_date quantity total_price
1 10928473 '2023-03-08' 1 28499.99
2 20483739 '2023-03-09' 2 9998.00
3 73648393 '2023-03-10' 3 3297.00

customers

id name
1 John Doe
2 Jane Smith
3 ...

Мы можем использовать CTE, например, для определения временной таблицы top_customers, которая содержит информацию о топ-5 клиентах по количеству сделанных заказов:

WITH top_customers AS (
    SELECT
        customer_id,
        COUNT(*) AS order_count
    FROM sales
    GROUP BY customer_id
    ORDER BY order_count DESC
    LIMIT 5
)

SELECT
    c.id,
    c.name,
    tc.order_count
FROM customers AS c
INNER JOIN top_customers AS tc ON c.id = tc.customer_id;

top_customers

id name order_count
1 John Doe 6
2 Jane Smith 6
4 Sarah Miller 5
5 Robert Brown 5
10 Susan Davis 5

Таблица на DB Fiddle

CTE позволяет создавать более читаемый и структурированный код, а также улучшает производительность запросов, так как подзапросы могут быть выполнены только один раз и результаты могут быть переиспользованы.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff