sqlzoo-使用groupby查找一个大陆上最大的国家;这可能吗?

67up9zun  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(225)

我正在处理sqlzoo的一个实践问题,我不知道为什么我尝试的解决方案不起作用,因为它对我来说是有意义的。
这是表格的格式:

-------------------------------------------------------------
|     name      continent    area    population       gdp     |
|-------------------------------------------------------------|
| Afghanistan     Asia      652230    25500100    20343000000 |
| .                                                           |
| .                                                           |
| .                                                           |
|                                                             |
 -------------------------------------------------------------

问题如下:
找出每个大陆上最大的国家(按地区),显示大陆、名称和地区。
我是这么想的:

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

我知道这样不行,但为什么不行?似乎嵌套的select语句正在查找每个大陆面积最大的国家,不是吗?
实际的解决方案如下:

SELECT continent, name, area FROM world x
  WHERE area >= ALL
    (SELECT area FROM world y
        WHERE y.continent=x.continent
          AND area>0)

但这似乎是一个复杂的方法;;这样最合理吗?有什么想法都可以
提前谢谢!!

icnyk63a

icnyk63a1#

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
rekjcdws

rekjcdws2#

一眼望去,这个查询似乎是有效的

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

演示1
考虑到目前的数据,一些问题将提出,而一些其他新的记录,如在下面的演示增加。而不是上面提到的:

SELECT w1.continent, name, w1.area 
  FROM world AS w1
  JOIN (SELECT continent, MAX(area) AS area
          FROM world 
         GROUP BY continent) AS w2
    ON w1.continent = w2.continent
   AND w1.area = w2.area

演示2

相关问题