You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DuckDB使用Materialized CTE时出现语法错误求助

解决DuckDB中物化CTE(Materialized CTE)的语法错误

你的语法错误源于DuckDB对物化CTE的关键字位置要求——MATERIALIZED必须放在CTE名称之前,而非AS之后。

修正后的SQL查询如下:

WITH MATERIALIZED avg_cte AS (
  SELECT carrier, MEAN(dep_delay) AS avg_dep_delay
  FROM flights
  GROUP BY carrier
)
SELECT * FROM avg_cte

对应的修正后R可复现代例:

cc <- DBI::dbConnect(duckdb::duckdb())
DBI::dbWriteTable(cc, "flights", nycflights13::flights)

q <- "WITH MATERIALIZED avg_cte AS (
  SELECT carrier, MEAN(dep_delay) AS avg_dep_delay
  FROM flights
  GROUP BY carrier
)
SELECT * FROM avg_cte
"
DBI::dbGetQuery(cc, q)

额外说明:

  • DuckDB中CTE默认是LAZY(按需计算),仅在被引用时执行
  • 使用MATERIALIZED会提前计算CTE结果并存储,适合后续查询多次引用该CTE的场景,能提升性能

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:42:39