帮我理解这一点:在问题3a的sqlzoo教程中(“在每个区域中找到最大的国家/地区”),为什么在嵌套的SELECT语句上附加“AND人口> 0”可以使此正确?

最佳答案

原因是因为:

AND population > 0

...正在过滤出名称为“梵蒂冈”的“欧洲”区域的空行,这会使以下情况变得复杂:
WHERE population >= ALL (SELECT population
                           FROM ...)

...因为NULL不是值,所以俄罗斯的排名不正确。 ALL运算符要求您要比较的值大于或等于从子查询返回的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

关于SQL:指定列> 0的冗余WHERE子句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3764752/

10-11 05:20