帮我理解这个问题:在sqlzoo教程的第3a题(“查找每个地区最大的国家”)中,为什么将“AND population > 0”附加到嵌套的SELECT语句会使其正确?
AND population > 0
...正在过滤区域为“欧洲”、名称为“梵蒂冈”的空行,这使得问题更加复杂:
WHERE population >= ALL (SELECT population
FROM ...)
由于NULL不是一个值,所以俄罗斯将无法正确排名。ALL运算符要求您比较的值大于或等于子查询返回的所有值,当其中存在NULL时,这是不可能发生的。
我的查询应该是:
SELECT region, name, population
FROM bbc x
WHERE population = (SELECT MAX(population)
FROM bbc y
WHERE y.region = x.region)
...或者,使用JOIN:
SELECT x.region, x.name, x.population
FROM bbc x
JOIN (SELECT y.region,
MAX(y.population) AS max_pop
FROM bbc y
GROUP BY y.region) z ON z.region = x.region
AND z.max_pop = x.population
不是这样的。最大的国家先验地有非零人口。
这就像检查最大的书是否有任何页面。
population > 0
更改为population不为空
。 - OMG Ponies