Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

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

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

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

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

Table 1. 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

Table 2. 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;
Table 3. 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

View on DB Fiddle

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


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 2 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу