2012-11-03 32 views
1

我有一個表bbc有以下的列:菜鳥關注:T-SQL子查詢

  • name(是指一個國家的名字在世界的特定區域內)
  • region(世界大陸)
  • ​​(在名稱名稱字段中的國家的人口)

我想這個問題的回答:

查找屬於所有人口少於250000000的地區的每個國家。顯示名稱,地區和人口。

我想答案可能是這樣的:

SELECT name, region, population 
FROM bbc 
GROUP by region 
HAVING MAX(population) < 250000000 

我得到我偏離航向的方式與這個答案的感覺...任何幫助,將不勝感激!

回答

1
select b.name, b.region, b.population 
from bbc as b 
where 
    b.region in 
    (
     select t.region 
     from bbc as t 
     group by t.region 
     having max(t.population) < 25000000 
    ) 
+0

你知道什麼是有趣的...我看到你的答案,這對我來說似乎是完全正確的。但是當我用它作爲答案而不是我發佈的內容時,它提供了非常不同的數據返回結果。請看:sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial – MonuMan5

+0

當我輸入你的查詢時......對我而言,我看起來與我的完全相同,但你使用了別名,我得到了不同的結果。你怎麼做的? O_o – MonuMan5

+0

:)現在就試試。你的問題中有錯誤的數字 - ** 250 000 000 **而不是** 25 000 000 ** –

2

這是在抱怨我的GROUP BY中不存在名稱和人口。所以我使用了子查詢來解決這個問題。

SELECT name, region, population FROM bbc 
WHERE region IN 

(SELECT region FROM bbc 
GROUP BY region 
HAVING MAX(population) < 25000000) 
+1

需要'IN'而不是'=',因爲可能有不止一個。 –

+0

幾乎 - 你需要一個'IN()'子句而不是'=',因爲它可能會返回多行。 –

+0

噢奇怪......它允許它工作。我以爲語法可能是錯的... – MonuMan5

0
Select 
    b.name, 
    b.region, 
    b.population 
From 
    bbc b 
Where 
    Not Exists (
    Select 
     'x' 
    From 
     bbc b2 
    Where 
     b.region = b2.region And 
     b.population > 250000000 
)