给定一个表格,世界有3个列:国家,大陆,人口如何获得显示每个人口最多的国家的输出?
这是我的代码:
select tb1.country, tb1.population from world tb1 join world tb2
ON tb1.continent=tb2.continent
Where tb1.population>tb2.population;
我的输出只返回1个来自1洲的国家。
答案 0 :(得分:1)
之前我使用过这种方法似乎运作良好
SELECT a.country, a.population
FROM world a
WHERE NOT EXISTS (
SELECT 1 FROM world b
WHERE b.continent = a.continent
AND b.population > a.population
)
请耐心等待,SQL Fiddle今天看起来真的很慢
详细说明,子查询充当外部查询的过滤器,从而消除了存在人口较多的国家/地区的任何行(通过NOT EXISTS
)。
这也回归了人口最多的国家。如果每个大陆只需要一个国家/地区,则需要进一步消除数据。
答案 1 :(得分:0)
答案如下:
select w1.country, w1.population from world w1,
(select max(w2.population) as p from world w2 group by w2.continental) T
where w1.population = T.p
答案 2 :(得分:0)
由于MySQL没有分析功能,您可以使用GROUP_CONCAT
伪造它:
SELECT
Continent,
SUBSTRING_INDEX( CONCAT( GROUP_CONCAT(Country ORDER BY Population DESC), '|'), '|', 1) AS Country,
SUBSTRING_INDEX( CONCAT( GROUP_CONCAT(Population ORDER BY Population DESC), ','), ',', 1) AS Population
FROM Populations
GROUP BY Continent;
或者您也可以使用:
SELECT
p.Continent,
p.Country,
p.Population
FROM Populations p
INNER JOIN
(
SELECT Continent,
MAX( Population ) AS max_pop
FROM Populations
GROUP BY Continent
) m
ON ( p.continent = m.continent
AND p.population = m.max_pop )
GROUP BY Continent;
或者:
SELECT
p.Continent,
p.Country,
p.Population
FROM Populations p
WHERE p.population =
(
SELECT MAX( Population )
FROM Populations m
WHERE p.continent = m.continent
);