【发布时间】:2021-10-26 14:45:45
【问题描述】:
select location, max(new_vaccinations)
from `nomadic-vine-330117.PortfolioProject.Covid_Vaccinations`
where new_vaccinations =
(
select sum(new_vaccinations) as totalVaccinated
from `nomadic-vine-330117.PortfolioProject.Covid_Vaccinations`
where continent is not null
group by location
order by totalVaccinated desc
limit 3
);
我收到此错误:
SELECT 列表表达式引用在 [1:8] 处既不分组也不聚合的列位置
这是大查询。
【问题讨论】:
-
您选择了一行,因为您使用 max(new_vaccinations) 聚合了这些行并且有 nio
GROUP BY子句。但是您选择的是location。哪个location?你的桌子上可能有很多。通过从SELECT子句中删除location或添加GROUP BY location,您可以在语法上得到正确的结果。解释你想要达到的目标。 -
在您按位置分组的子查询中。这意味着子查询在每个位置产生一行。但随后您通过
where new_vaccinations =比较结果。你不能。比较两个值时可以使用=。在数据集中查找值时使用IN。但是,我不知道您实际上想要实现什么。所以我不知道该建议什么。 -
当我按位置添加组时,我得到这个:在 [1:19] 不允许聚合聚合
-
这很奇怪。为什么 BigQuery 会禁止读取聚合的中间结果并再次聚合?这可能是一个副作用。如前所述,您将
=与返回多行的子查询结合使用是另一个错误。请说明您希望查询执行的操作。 -
好的。查询完全搞砸了。很抱歉这么说。我会发布一个答案。
标签: mysql sql google-bigquery