我试过在这里整理并寻求帮助,但到目前为止我什么都没有......
$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的同一张表中返回该城市。到目前为止,我很确定我必须使用一个子查询,但我已经玩了几个小时,并且无法解决它。
答案 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