mysql - 另一个SQL教程问题: Field > 0?

标签 mysql sql select

好的,this one (3a;提供答案的示例问题)让我摸不着头脑:

bbc(name, region, area, population, gdp)
3a. Find the largest country in each region:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population > 0)

当我从数据库引擎循环遍历表条目并将每个 x.region 与当前匹配的角度思考时,我理解了“WHERE y.region = x.region”的概念y.region(在嵌套的 SELECT 中)...但是 wtf 'AND Population > 0' 会做什么?没有它,这不是一个正确的答案,但我不明白如何不......

最佳答案

该子句之所以存在,只是因为欧洲表(梵蒂冈)中有一个条目,其人口列中有 NULL。以下内容也有效,我相信更容易理解:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population IS NOT NULL)

MySQL documentation for ALL subqueries ,有一个有用的评论(强调他们的):

In general, tables containing NULL values and empty tables are "edge cases." When writing subquery code, always consider whether you have taken those two possibilities into account.

关于mysql - 另一个SQL教程问题: Field > 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/434374/

相关文章:

c# - 通过mysql导出Gridview数据

mysql - 如何为两个表设置不同的自增id

php - SQL选择计数代码不起作用

mysql - 如何在2个字符串中使用JOIN?

mysql - 为什么我不能添加由两列组成的外键?

php - MySQL:获取所有文章的顺序(2个表)

php - 如何找到哪个表属于单个参数(slug)

sql - 每组最大 n 个 SQL 查询的高性能方法

php - 如果前两个或更多单词匹配则返回最短的字符串 - PHP MYSQL

PHP连接两个表的帮助