调用与其MAX属性相关的列

时间:2014-03-08 20:01:46

标签: sql postgresql

我试过在这里整理并寻求帮助,但到目前为止我什么都没有......

$query = "
  SELECT 
    country.name,
    MAX(city.population) as max
  FROM 
    lab6.city,
    lab6.country
  WHERE city.country_code = country.country_code
  GROUP BY country.name
  ORDER BY max DESC";

这将返回一个国家/地区中人口最多的城市的最大人口。我需要做的是从找到MAX city.population的同一张表中返回该城市。到目前为止,我很确定我必须使用一个子查询,但我已经玩了几个小时,并且无法解决它。

2 个答案:

答案 0 :(得分:0)

如果共享最大人口,这将返回每个国家/地区的多个城市。实际上不需要在查询中与Country连接以获得最大值。如果您想知道国家名称,则只需要它。

SELECT co.name, c.city, c.population FROM lab6.city c
INNER JOIN lab6.country co ON co.country_code = c.country_code
INNER JOIN
(SELECT country_code, MAX(population) as max
FROM   lab6.city
GROUP BY country_code) max
ON c.population = max.max
AND c.country_code = max.country_code;

答案 1 :(得分:0)

这应该这样做:

select *
from (
  SELECT country.name as country_name,
         city.population as city_population,
         city.name  as city_name,
         rank() over (partition by country.name order by city.population desc ) as population_rank
  FROM lab6.city
    JOIN lab6.country ON city.country_code = country.country_code
) t
where population_rank = 1;

由于使用了窗口功能,您可以选择所需的任何其他列,因为您不受group by限制的限制。

有关窗口功能的更多信息,请参见手册:http://www.postgresql.org/docs/current/static/tutorial-window.html