我正在研究SQLZOO的练习题,我不确定为什么我正在尝试的解决方案不起作用,因为它对我有意义。
这是table ::
的格式(名称 ------ 大陆 ----- 区域 -------- 人口 ---- gdp
阿富汗 - 亚洲--------- 652230 ------- 25500100 ----- 20343000000
...)
问题如下:
找出每个大洲最大的国家(按地区),显示大陆,名称和地区。
以下是我想要解决的方法:
SELECT continent, name, area FROM world
WHERE name IN (SELECT continent, name, MAX(area) FROM world
GROUP BY continent);
我知道这不起作用,但为什么不呢?似乎嵌套的SELECT语句正在寻找每个大陆具有MAX区域的国家,不是吗?
对此的实际解决方案如下:
SELECT continent, name, area FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE y.continent=x.continent
AND area>0)
但这似乎是一种复杂的方式来提出它;;这种方式最有意义吗?任何想法都赞赏
提前谢谢!!
答案 0 :(得分:2)
只需使用:
SELECT continent, name, area
FROM world
WHERE area IN (SELECT MAX(area)
FROM world
GROUP BY continent);
答案 1 :(得分:0)
select A.continent, W.name, A.area
from
(select continent, max(area) as area from world group by continent)A, world W
where
A.continent = W.continent
and
A.area = W.area
答案 2 :(得分:0)
select continent, name, area
from
(select continent, name, area, rank() over(partition by continent order by area desc) as r1
from world) a
where a.r1 = 1
答案 3 :(得分:-3)
select continent, name, area
from world x
where area = All (select MAX(area) from world where x.continent = continent)