SQLZOO-使用GROUPBY找到一个大陆上最大的国家;这可能吗?

时间:2018-05-24 19:54:39

标签: mysql sql group-by nested aggregate-functions

我正在研究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)

但这似乎是一种复杂的方式来提出它;;这种方式最有意义吗?任何想法都赞赏

提前谢谢!!

4 个答案:

答案 0 :(得分:2)

只需使用:

SELECT continent, name, area 
  FROM world
 WHERE area IN (SELECT MAX(area) 
                  FROM world 
                 GROUP BY continent);

SQL Fiddle Demo

答案 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)