Php Postgresql使用聚合和非聚合列,按分组

Php Postgresql使用聚合和非聚合列,按分组,php,sql,postgresql,aggregate,Php,Sql,Postgresql,Aggregate,讲座和我的实验作业中的一些事情解释得不太清楚。我无法显示正确的信息。 这是数据库信息,仅供您参考,以帮助我。 这就是我试图执行的查询 这将导致抛出此SQl错误 连接到数据库! 查询失败:错误:列“city.name”必须出现在GROUP BY子句中或用于聚合函数行3:city.name^ 现在,如果我将city.name添加到GROUPBY子句中,它将返回4096行!我不希望发生这种情况,结果必须按国家名称分组,即232行。我只想显示国家名称、城市名称以及该国人口最多的城市。城市的名字让我很反

讲座和我的实验作业中的一些事情解释得不太清楚。我无法显示正确的信息。 这是数据库信息,仅供您参考,以帮助我。 这就是我试图执行的查询

这将导致抛出此SQl错误

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

现在,如果我将city.name添加到GROUPBY子句中,它将返回4096行!我不希望发生这种情况,结果必须按国家名称分组,即232行。我只想显示国家名称、城市名称以及该国人口最多的城市。城市的名字让我很反感,我猜有一个更复杂、语法更重的解决方案。 谢谢你能提供的帮助。
-汤姆·里斯

你需要这样的东西:

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”查询中仅返回聚合表达式或group by表达式。(如错误所述)

好的,这更有意义,教授确实提供了一个与此非常相似的示例,但它仅在一张桌子上,我无法连接点。谢谢,欢迎光临。还有其他方法可以达到同样的效果,但它们不是ansi sql:在学校里,你可能应该练习所学的方法。我很确定窗口函数是标准sql。我认为你的第一个
,其中
应该是来自的
,你可能想对那些讨厌的隐式连接做些什么。你是对的。。。当我学习sql时,这些窗口函数实际上并不存在…:-)是的,我确定了从哪里到哪里,一切正常,这是证据