ClickHouse/docs/en/sql-reference/statements/select/with.md
Ivan Blinkov 7170f3c534
[docs] split aggregate function and system table references (#11742)
* prefer relative links from root

* wip

* split aggregate function reference

* split system tables
2020-06-18 11:24:31 +03:00

1.7 KiB
Raw Blame History

toc_title
WITH

WITH Clause

This section provides support for Common Table Expressions (CTE), so the results of WITH clause can be used in the rest of SELECT query.

Limitations

  1. Recursive queries are not supported.
  2. When subquery is used inside WITH section, its result should be scalar with exactly one row.
  3. Expressions results are not available in subqueries.

Examples

Example 1: Using constant expression as “variable”

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

Example 2: Evicting sum(bytes) expression result from SELECT clause column list

WITH sum(bytes) as s
SELECT
    formatReadableSize(s),
    table
FROM system.parts
GROUP BY table
ORDER BY s

Example 3: Using results of scalar subquery

/* this example would return TOP 10 of most huge tables */
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

Example 4: Re-using expression in subquery

As a workaround for current limitation for expression usage in subqueries, you may duplicate it.

WITH ['hello'] AS hello
SELECT
    hello,
    *
FROM
(
    WITH ['hello'] AS hello
    SELECT hello
)
┌─hello─────┬─hello─────┐
│ ['hello'] │ ['hello'] │
└───────────┴───────────┘