【发布时间】:2014-10-27 22:38:40
【问题描述】:
首先,我为 mySQL 使用世界数据库:http://dev.mysql.com/doc/world-setup/en/index.html。
我正在尝试构建一个句子,从每个大陆返回人口最少的国家,如果人口相同,则显示每个大陆的所有国家。
通过以下句子,我设法得到了每个大陆上人口最少的一个国家的人口,但只有一个显示,并且该国家/地区显示不正确。
SELECT
CASE
WHEN Continent="Europe" THEN "Europe"
WHEN Continent="Asia" THEN "Asia"
WHEN Continent="North America" THEN "North America"
WHEN Continent="South America" THEN "South America"
WHEN Continent="Africa" THEN "Africa"
WHEN Continent="Oceania" THEN "Oceania"
ELSE "Antarctica"
END
AS Area,
Name,
CONCAT(MIN(Population),"hb") AS "N habitantes"
FROM Country
GROUP BY Area;
给出这个结果
'Africa' , 'Angola' , '0hb'
'Antarctica' , 'Antarctica' , '0hb'
'Asia' , 'Afghanistan' , '286000hb'
'Europe' , 'Albania' , '1000hb'
'North America', 'Aruba' , '7000hb'
'Oceania' , 'American Samoa', '0hb'
'South America', 'Argentina' , '2000hb'
好吧,代码很愚蠢,我想必须有一种方法可以更好地表明对于每个大陆,查询必须返回人口最少的国家。我想知道它是否存在,因为只有7个大陆可以做到,但如果它们是1000000......
通过这句话,我将能够返回我所指出的大陆上人口最少的国家,例如:
SELECT Name,Population FROM Country WHERE Population=
(SELECT MIN(Population) FROM Country WHERE Continent="Antarctica");
返回:
'南极洲','0'
'法属南部地区', '0'
'布维岛','0'
'赫德岛和麦克唐纳群岛','0'
'英属印度洋领地', '0'
'南乔治亚和南桑威奇群岛','0'
'美国本土外小岛屿','0'
我认为必须有一种方法可以混合这两个句子,并且它返回的结果与每个大陆的先前结果相似,所以它返回我在开头所说的内容。我的意思是,如果世界上只有南极洲和南美洲的大陆应该将其添加到之前的结果中:
'福克兰群岛','2000'
“诺福克岛”,“2000”
'纽埃','2000'
'托克劳','2000'
我知道我可以使用 UNION 为每个大洲造一个类似于第二个的句子,但再一次,这是可行的,因为只有 7 个大洲。
知道我错过了什么吗?感谢您的帮助。
【问题讨论】: