我在 SELECT 教程中尝试 SQLZoo 的 SELECT问题 5
哪些国家的 GDP 比欧洲任何国家都高?[只写名字。]
这是我的解决方案,这是不正确的,但我不明白为什么。
SELECT name
FROM world
WHERE gdp > ALL (SELECT gdp FROM world WHERE continent ='Europe')
我做错了什么?
我在 SELECT 教程中尝试 SQLZoo 的 SELECT问题 5
哪些国家的 GDP 比欧洲任何国家都高?[只写名字。]
这是我的解决方案,这是不正确的,但我不明白为什么。
SELECT name
FROM world
WHERE gdp > ALL (SELECT gdp FROM world WHERE continent ='Europe')
我做错了什么?
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
当您测试查询时,世界表可能对某些欧洲国家/地区具有空值,因此最好进行检查以避免空值。
SELECT name
FROM world
WHERE gdp > (SELECT MAX(gdp) FROM world WHERE continent = 'Europe')
使用 MAX 聚合函数从子查询返回最高 GDP,这是您要与外部查询进行比较的结果。
select name from world
where gdp > ALL(select gdp from world
where continent = 'Europe'
and gdp is not null)
由于 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 是最小值。
我连续地回答了这些问题,出于某种原因,德国从上一个问题出现在我的脑海中。所以我在我的查询中有这个并得到了正确的答案。大声笑试试看。我正在使用 Chrome
从 gdp > ALL 的世界中选择名称(从名称 =“德国”和人口 <>0 的世界中选择 gdp)
试试这个:我们可以选择最大值,然后应用大于条件
select name from world where gdp > (select max(gdp) from world where continent = 'Europe')
尝试这个:
SELECT name FROM world WHERE gdp>= ALL(select gdp from world where continent='europe' and gdp>=0) and continent !='europe'