Ham*_*ter 5 sql database where-clause
帮助我理解这一点:在问题3a 的sqlzoo教程中("查找每个区域中最大的国家"),为什么将'AND population> 0'附加到嵌套的SELECT语句会使其正确?
究其原因,是因为:
AND population > 0
Run Code Online (Sandbox Code Playgroud)
...正在过滤掉“欧洲”区域、名称“梵蒂冈”的空行,这使以下情况变得复杂:
WHERE population >= ALL (SELECT population
FROM ...)
Run Code Online (Sandbox Code Playgroud)
...因为 NULL 不是一个值,所以俄罗斯不会被正确排名。ALL 运算符要求您比较的值大于或等于从子查询返回的所有值,当其中存在 NULL 时,这种情况永远不会发生。
我的查询是:
SELECT region, name, population
FROM bbc x
WHERE population = (SELECT MAX(population)
FROM bbc y
WHERE y.region = x.region)
Run Code Online (Sandbox Code Playgroud)
...或者,使用 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
Run Code Online (Sandbox Code Playgroud)