Конструкция 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 позволяет создавать более читаемый и структурированный код, а также улучшает производительность запросов, так как подзапросы могут быть выполнены только один раз и результаты могут быть переиспользованы.
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.