ClickHouse 中的公共表表达式 CTE

本贴最后更新于 889 天前,其中的信息可能已经时移世易

什么是公共表表达式(CTE) ?在本文中,学习如何在 ClickHouse 数据库中使用 CTE,并通过示例跟踪用例

在下列情况下使用 CTE 很方便:

  • 当一个请求可以获得数据,并且其大小适合内存空间时
  • 需要多次使用此查询的结果
  • 创建递归查询

额外的好处是提高了 SQL 查询的可读性。

CTE 与临时表和嵌套查询之间的区别是什么?

  • 如果子查询是相关的,那么它的调用将针对选定内容中的每一行重复,从而显著增加执行此查询的成本。
  • 用大量数据填充临时表会在磁盘上造成负载。
  • 由于存储临时表的特殊性,使用临时表执行查询会增加执行时间。

语法

ClickHouse 既支持 WITH< 表达式 > AS < 标识符 > ,也支持 WITH< 标识符 > AS < 子查询表达式 > 语法。

  • 使用 WITH 初始化 CTE。
  • 为查询提供名称。
  • 接着是 AS。
  • 定义查询
  • 如果需要多个 CTE,请用逗号分隔它们。
WITH locations AS
    (
        SELECT location
        FROM table
        WHERE date > (today() - 10)
    )
SELECT *
FROM locations
  • 使用 WITH 初始化 CTE。
  • 定义一个表达方式
  • 接着是 AS。
  • 为表达式提供名称。
  • 如果需要多个 CTE,请用逗号分隔它们。
WITH ('USA', 'BRA') AS locations
SELECT 'ARG' IN (locations)

例子

建表:

 **

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
whimsy
喜欢技术,主语言java,兼顾会python、go、javascript、shell、flutter。喜欢自己折腾产品,十年技术架构师,前后端运维高速搬运工程师。 东莞