5

在 SELECT 教程中尝试 SQLZoo 的 SELECT问题 5

哪些国家的 GDP 比欧洲任何国家都高?[只写名字。]

这是我的解决方案,这是不正确的,但我不明白为什么。

SELECT name  
  FROM world  
 WHERE gdp > ALL (SELECT gdp FROM world WHERE continent ='Europe')

我做错了什么?

4

7 回答 7

11
select name, gdp 
from world x 
where gdp > all (select gdp from world y where continent = "Europe" and gdp > 0)

你错过了一个空值检查,因为如果空值未知结果将被获取,请参阅参考:http ://dev.mysql.com/doc/refman/5.5/en/all-subqueries.html

当您测试查询时,世界表可能对某些欧洲国家/地区具有空值,因此最好进行检查以避免空值。

于 2014-01-14T18:36:35.493 回答
6
SELECT name 
  FROM world 
 WHERE gdp > (SELECT MAX(gdp) FROM world WHERE continent = 'Europe')

使用 MAX 聚合函数从子查询返回最高 GDP,这是您要与外部查询进行比较的结果。

于 2014-01-04T16:13:01.530 回答
1
select name from world 
 where gdp > ALL(select gdp from world 
 where continent = 'Europe' 
   and gdp is not null)
于 2016-02-14T00:34:16.400 回答
0

由于 GDP 有一个空值,因此如果您将任何其他值与空值进行比较,答案将为空值。

SELECT name FROM world
WHERE
GDP > ALL(SELECT COALESCE(GDP,0) FROM world WHERE continent = 'Europe');

在上面,如果你通过COALESCE(GDP,0),这意味着你正在传递 GDP 列,如果 GDP 中有任何值为 Null,那么 COALESCE 函数将返回“0”(用户提供的值)。

传递 0 作为标准值进行比较,因为 0 是最小值。

于 2020-12-28T05:05:56.047 回答
0

我连续地回答了这些问题,出于某种原因,德国从上一个问题出现在我的脑海中。所以我在我的查询中有这个并得到了正确的答案。大声笑试试看。我正在使用 Chrome

从 gdp > ALL 的世界中选择名称(从名称 =“德国”和人口 <>0 的世界中选择 gdp)

于 2016-03-04T03:37:26.027 回答
0

试试这个:我们可以选择最大值,然后应用大于条件

select name from world where gdp > (select max(gdp) from world where continent = 'Europe')
于 2021-01-27T13:14:27.387 回答
-1

尝试这个:

SELECT name   FROM world  WHERE  gdp>= ALL(select gdp from world where continent='europe' and gdp>=0) and continent !='europe'
于 2018-06-25T16:23:40.833 回答