【问题标题】:Column 'city.POPULATION' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause列“city.POPULATION”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中
【发布时间】:2026-01-27 16:35:01
【问题描述】:

我正在创建一个查询,我看到了这个错误消息。 这是我要执行的查询:

select D.ID_city
,      D.ID_year
,      D.NB_deaths
,      D.NB_births_M
,      D.NB_births_F
,      D.NB_population_AS
,      D.NB_population_ACL
,      COUNT( NB_births_M+ NB_births_F)/C.population as  Birthrate
,      COUNT(NB_deaths_M + NB_deaths_F) as Mortality
from   Demography D 
join   region C
on     (D.Id_city =C.Id_city)
group
by     D.ID_city
,      D.ID_year
,      D.NB_deaths_M
,      D.NB_births_M
,      D.NB_births_F
,      D.NB_population_AS
,      D.NB_population_ACL

【问题讨论】:

  • 你有什么问题?
  • @user2315555:标题...
  • 您是否考虑将“city.POPULATION”列添加到 group by 子句?还是从选择列表中删除它?该错误似乎很容易解释......
  • D.NB_deaths_F,c.population --> 按组添加

标签: sql sql-server-2008 select


【解决方案1】:

您应该在group by 中包含c.population,因为您在count 聚合函数之外使用了该列:

COUNT( NB_births_M+ NB_births_F)/C.population

使用这个(也添加了D.NB_deaths_F,因为它也是必要的):

select D.ID_city
,      D.ID_year
,      D.NB_deaths
,      D.NB_births_M
,      D.NB_births_F
,      D.NB_population_AS
,      D.NB_population_ACL
,      COUNT( NB_births_M+ NB_births_F)/C.population as  Birthrate
,      COUNT(NB_deaths_M + NB_deaths_F) as Mortality
from   Demography D 
join   region C
on     (D.Id_city =C.Id_city)
group
by     D.ID_city
,      D.ID_year
,      D.NB_deaths_M
,      D.NB_deaths_F -- <-- added
,      D.NB_births_M
,      D.NB_births_F
,      D.NB_population_AS
,      D.NB_population_ACL
,      C.population -- <-- added

【讨论】:

  • @user3651955:需要更多帮助?
  • 谢谢你的回答,我不想在 group by 中添加 C.population
  • 那么不要使用count中的字段。
  • 但在我的计算中,我需要除以总人口,“COUNT(NB_births_M+ NB_births_F)/C.population as Birthrate”