Postgresql使用聚合和非聚合列,分组依据

时间:2013-10-06 18:29:03

标签: php sql postgresql aggregate

讲座和实验室作业中的一些内容没有得到很好的解释。我无法显示正确的信息。 这是数据库信息,只是您的帮助我的参考。 The database tables info 这是我试图执行的查询 The postgresql php select statement

这会导致抛出此SQl错误

连接数据库! 查询失败:错误:列“city.name”必须出现在GROUP BY子句中或用于聚合函数LINE 3:city.name ^

现在,如果我将city.name添加到GROUP BY子句中,它将返回4096行!我不希望这种情况发生,结果必须按国家名称分组,即232行。我只是想显示国家名称,城市名称以及该国家人口最多的城市。城市名称让我失望,我猜测有更复杂的语法重要解决方案。 感谢您的任何帮助,您可以提供。 -Tom Reese

1 个答案:

答案 0 :(得分:0)

你需要这样的东西:

select
        country.name,
        city.name,
        mp.maxpop
from
        lab6.country,
        lab6.city,
        (select
                country_code,
                max(population) as maxpop
        from
                lab6.city
        group by
                country_code
        ) mp
where
        country.country_code=mp.country_code and
        country.country_code=city.county_code and 
        mp.maxpop=city.population

注释:

  • 这可以给你更多结果/县。
  • 您的原始查询不起作用,因为在ansi sql中,您不能仅通过“group by”查询中的表达式返回聚合或分组。 (如错误提及)