slug: /zh/sql-reference/statements/select/with
sidebar_label: WITH
WITH子句 {#with-clause}
本节提供对公共表表达式的支持 (CTE),所以结果 WITH 子句可以在其余部分中使用 SELECT 查询。
限制 {#limitations}
- 不支持递归查询。
- 当在section中使用子查询时,它的结果应该是只有一行的标量。
- Expression的结果在子查询中不可用。
例 {#examples}
示例1: 使用常量表达式作为 “variable”
WITH '2019-08-01 15:23:00' as ts_upper_boundSELECT *FROM hitsWHEREEventDate = toDate(ts_upper_bound) ANDEventTime <= ts_upper_bound
示例2: 从SELECT子句列表中逐出sum(bytes)表达式结果
WITH sum(bytes) as sSELECTformatReadableSize(s),tableFROM system.partsGROUP BY tableORDER BY s
例3: 使用标量子查询的结果
/* this example would return TOP 10 of most huge tables */WITH(SELECT sum(bytes)FROM system.partsWHERE active) AS total_disk_usageSELECT(sum(bytes) / total_disk_usage) * 100 AS table_disk_usage,tableFROM system.partsGROUP BY tableORDER BY table_disk_usage DESCLIMIT 10
例4: 在子查询中重用表达式
作为子查询中表达式使用的当前限制的解决方法,您可以复制它。
WITH ['hello'] AS helloSELECThello,*FROM(WITH ['hello'] AS helloSELECT hello)
┌─hello─────┬─hello─────┐│ ['hello'] │ ['hello'] │└───────────┴───────────┘
