首先,我正在使用mySQL的世界數據庫:http://dev.mysql.com/doc/world-setup/en/index.html。如何混合並改進這個SQL語句?
我試圖建立一個句子,返回來自每個大陸最不居住的國家,如果人口相同,則顯示每個大洲的所有國家。
用下面的句子,我設法得到每個大陸中最少居住的國家的人口,但只有其中一個顯示,並且國家顯示不正確。
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大洲。
有什麼想法我錯過了什麼?謝謝你的幫助。
謝謝您的回答序列號,但除非我已經理解錯了,它不起作用。首先,子查詢返回多於一行,所以它不能通過執行,我想你想把最後一行)放在國家之後,這樣它就可以工作,但是這個世界上所有國家中人口最少的國家並不在每個大陸,只是顯示每個大洲的一個國家。 – user2638180 2014-10-27 12:17:20