BigQuery运行SQL报Syntax error语法错误,请求排查代码问题
问题分析与修复方案
报错信息翻译:语法错误:预期输入已结束,但在对应位置识别到符号"("
你的SQL存在以下4个明确的语法/逻辑错误:
- SELECT子句缺逗号:
gen.male_smokers字段和后续的sum(female_smokers)聚合函数之间没有加逗号分隔,这是触发当前报错的直接原因 - FROM子句多余分号:
FROM capstone-project-317016.Portfolio1.CovidDeaths dea;末尾的分号会直接截断SQL语句,后续的JOIN逻辑会被识别为独立的非法语句 - 窗口函数语法错误:窗口函数的别名需要写在
OVER()子句之后,你写的sum(gen.male_smokers) as TotalMale over (...)不符合语法规范,别名错放在了OVER子句之前 - GROUP BY规则不满足:你在SELECT中查询了
dea.location、gen.female_smokers、gen.male_smokers三个非聚合字段,但GROUP BY仅指定了dea.population,不符合BigQuery的聚合查询规则,所有非聚合字段都需要加入GROUP BY子句;如果你是要使用窗口函数做滚动计算,不需要额外加GROUP BY
修正后代码示例(适配统计各地区吸烟者总数+滚动男性吸烟者数的需求)
SELECT dea.location, dea.population, gen.female_smokers, gen.male_smokers, SUM(gen.female_smokers) OVER (PARTITION BY dea.location) AS TotalFemales, SUM(gen.male_smokers) OVER (PARTITION BY dea.location ORDER BY dea.location, dea.population) AS RollingWomen FROM `capstone-project-317016.Portfolio1.CovidDeaths` dea JOIN `capstone-project-317016.Portfolio1.CovidbyGender` gen ON dea.location = gen.location AND dea.population = gen.population WHERE dea.location IS NOT NULL
内容的提问来源于stack exchange,提问作者Luchee
相关产品推荐
相关产品推荐

