mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-04 21:42:39 +00:00
0f92fe9ad2
* Update WITH desc * Update docs/en/sql-reference/statements/select/with.md Co-authored-by: BayoNet <da-daos@yandex.ru> * Update docs/en/sql-reference/statements/select/with.md Co-authored-by: BayoNet <da-daos@yandex.ru> * Update docs/en/sql-reference/statements/select/with.md Co-authored-by: BayoNet <da-daos@yandex.ru> * Fixed, ru translated * Update docs/en/sql-reference/statements/select/with.md Co-authored-by: BayoNet <da-daos@yandex.ru> * Fixed syntax description * Update docs/ru/sql-reference/statements/select/with.md Co-authored-by: BayoNet <da-daos@yandex.ru> * Update Co-authored-by: BayoNet <da-daos@yandex.ru>
2.2 KiB
2.2 KiB
toc_title |
---|
WITH |
Секция WITH
Clickhouse поддерживает Общие табличные выражения, то есть позволяет использовать результаты выражений из секции WITH
в остальной части SELECT
запроса. Именованные подзапросы могут быть включены в текущий и дочерний контекст запроса в тех местах, где разрешены табличные объекты. Рекурсия предотвращается путем скрытия общего табличного выражения текущего уровня из выражения WITH
.
Синтаксис
WITH <expression> AS <identifier>
или
WITH <identifier> AS <subquery expression>
Примеры
Пример 1: Использование константного выражения как «переменной»
WITH '2019-08-01 15:23:00' as ts_upper_bound
SELECT *
FROM hits
WHERE
EventDate = toDate(ts_upper_bound) AND
EventTime <= ts_upper_bound;
Пример 2: Выкидывание выражения sum(bytes) из списка колонок в SELECT
WITH sum(bytes) as s
SELECT
formatReadableSize(s),
table
FROM system.parts
GROUP BY table
ORDER BY s;
Пример 3: Использование результатов скалярного подзапроса
/* запрос покажет TOP 10 самых больших таблиц */
WITH
(
SELECT sum(bytes)
FROM system.parts
WHERE active
) AS total_disk_usage
SELECT
(sum(bytes) / total_disk_usage) * 100 AS table_disk_usage,
table
FROM system.parts
GROUP BY table
ORDER BY table_disk_usage DESC
LIMIT 10;
Пример 4: Переиспользование выражения
WITH test1 AS (SELECT i + 1, j + 1 FROM test1)
SELECT * FROM test1;