【问题标题】:SELECT list expression references column location which is neither grouped nor aggregated at [1:8]SELECT 列表表达式引用在 [1:8] 处既不分组也不聚合的列位置
【发布时间】: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


【解决方案1】:

您的查询中有语法错误:

  • 聚合到最后一行并选择一个位置而不说哪个位置。
  • = 将一个值与可能包含多行的结果集进行比较。
  • 我认为您不能在整个路径上使用反引号,而必须在单个名称上使用它们:nomadic-vine-330117.PortfolioProject.Covid_Vaccinations。我在这里可能错了。

您的查询中也存在语义错误:

  • 子查询为每个位置返回一行。您拍摄其中三个,但将它们的总和与单行的值进行比较。仅当三个顶部位置在表中各只有一行时才能匹配。但是,你为什么要聚合呢?

您说您想要按国家(地区)排名第三的疫苗接种率。但是,您似乎真的希望该国家按疫苗接种率排名第 3。当然,我可能是错的。

第一步按疫苗接种数量对国家/地区进行排名。然后选择#3。

select *
from
(
  select
    location,
    dense_rank() over(partition by country order by sum(new_vaccinations) desc) as rnk
  from `nomadic-vine-330117`.portfolioproject.covid_vaccinations cv
  group by location
) ranked
where rnk = 3;

看看这是如何处理关系的,以及你是否想这样对待它们。

【讨论】:

  • 我试过了,但它没有返回任何东西。空结果
  • 那么最多只有两个 new_vaccinations 总和。例如,如果所有国家的总和为 100,则它们都在第 1 位,没有一个在第 3 位。
  • 表格包含各大洲的所有国家。
  • 以下查询获取每个国家/地区的 3 个顶级疫苗接种数。我只需要使用外部查询从中获取第三高的。 select distinct sum(new_vaccinations) as totalVaccinated from nomadic-vine-330117.PortfolioProject.Covid_Vaccinations wherecontinent is not null group by location order by totalVaccinated desc limit 3
  • 表格包含所有国家?这是一个国家/地区/位置一行的国家/地区表?那为什么要求和呢?我认为每个国家/地区必须添加多个条目。
猜你喜欢
  • 2019-02-20
  • 2017-04-09
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多