使用WITH子句的基础SQL查询报'Unrecognized name'错误求助
问题排查与修正方案
第一个错误的原因
- 你定义的
avg_price是一个临时表(CTE),不是单个数值变量,直接在WHERE子句里写avg_price,BigQuery无法识别它指向的是表还是列。 - 另外,你的CTE里
AVG(UnitPrice)没有指定列别名,就算想引用这个临时表,也没法定位到平均值这个具体字段。
第二个错误的原因
BigQuery的Legacy SQL方言不支持WITH子句(公共表表达式),只有Standard SQL才兼容这个语法,所以切换到Legacy SQL必然会报语法错误。
修正后的查询语句
给CTE里的平均值加上列别名,并且在主查询里关联临时表、引用具体字段:
WITH avg_price AS ( SELECT AVG(UnitPrice) AS average_price -- 为平均值指定列别名 FROM `erics-test-data-project.sales.sales` ) SELECT UnitPrice FROM `erics-test-data-project.sales.sales`, avg_price -- 关联临时表 WHERE UnitPrice > avg_price.average_price -- 引用临时表中的平均值字段
如果不想用WITH子句,也可以直接用子查询实现:
SELECT UnitPrice FROM `erics-test-data-project.sales.sales` WHERE UnitPrice > (SELECT AVG(UnitPrice) FROM `erics-test-data-project.sales.sales`)
内容的提问来源于stack exchange,提问作者Eric Graham
相关产品推荐
相关产品推荐

