BigQuery执行SQL报错location列未分组或未聚合问题求助
报错原因分析
你遇到的报错触发核心是SQL语法规则要求:当SELECT子句中同时存在非聚合普通字段和聚合函数时,所有非聚合的普通字段必须全部放到GROUP BY子句中声明聚合维度。你的外层SQL中同时选了location普通字段和max(new_vaccinations)聚合函数,但没有写GROUP BY location,因此触发了如下报错:
SELECT list expression references column location which is neither grouped nor aggregated at [1:8]
除此之外你的SQL还存在另外两处逻辑错误,修复完语法问题后也会触发报错:
- 子查询通过
LIMIT 3返回了3行总接种量数值,外层WHERE条件用=匹配多值,会触发「单值子查询返回多行」的报错,多值匹配应该用IN运算符 - 业务逻辑不匹配:子查询计算的是每个国家累计总接种量,外层却用单日接种字段
new_vaccinations和累计值匹配,二者统计维度完全不一致,无法得到你期望的结果
修复方案
根据你统计新冠疫苗接种数据的需求,分两种常见场景给出修复代码:
场景1:获取总接种量排名前三的国家及对应总接种数(最符合你现有子查询的逻辑)
SELECT location, SUM(new_vaccinations) AS total_vaccinated FROM `nomadic-vine-330117.PortfolioProject.Covid_Vaccinations` WHERE continent IS NOT NULL GROUP BY location ORDER BY total_vaccinated DESC LIMIT 3;
场景2:获取总接种量前三的国家,及对应各国的单日最高接种量
SELECT location, MAX(new_vaccinations) AS max_daily_vaccinations FROM `nomadic-vine-330117.PortfolioProject.Covid_Vaccinations` WHERE location IN ( -- 先查到总接种量前三的国家名称 SELECT location FROM `nomadic-vine-330117.PortfolioProject.Covid_Vaccinations` WHERE continent IS NOT NULL GROUP BY location ORDER BY SUM(new_vaccinations) DESC LIMIT 3 ) -- 按国家分组统计每个国家的单日最高接种量 GROUP BY location;
内容的提问来源于stack exchange,提问作者Gunel Hasan
相关产品推荐
相关产品推荐

