Конструкция Common Table Expressions (CTE) создает именованную временную таблицу, которая может быть использована в подзапросах, объединениях, агрегатных функциях и других операциях.
Преимущество использования CTE заключается в возможности переиспользования подзапросов и создании более читаемого и удобного для понимания кода.
Предположим, у нас есть таблица с продажами товаров и таблица с покупателями
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 |
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;
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 позволяет создавать более читаемый и структурированный код, а также улучшает производительность запросов, так как подзапросы могут быть выполнены только один раз и результаты могут быть переиспользованы.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.