sql >=All 和 MAX 之间的区别

标签 sql oracle

有什么区别

语句 1:

SELECT continent, name, area FROM world x
  WHERE x.area >= ALL
    (SELECT y.area FROM world y
    WHERE y.continent=x.continent)

声明 2:

SELECT continent,name,area FROM world x
WHERE x.area =(SELECT MAX(y.area) FROM world y
WHERE y.continent=x.continent)

它似乎给我不同的结果,如下所示。

对于语句 1: http://s8.postimg.org/6t8588cz9/ss1.jpg

对于语句 2: http://s4.postimg.org/5lfo10xul/ss2.jpg

>= ALL 在逻辑上不等同于 SELECT MAX() 吗?

使用 MAX 的第二条语句返回第一条语句的超集。(与第一条语句相比结果更多)我不明白为什么会这样。

最佳答案

这个特定数据集的问题是一些大陆如“非洲”和“欧洲”的面积数据为空(例如欧洲的荷兰)

将 area>0 添加到您的第一个查询中,您应该会看到相同的结果

SELECT continent, name, area FROM world x
  WHERE x.area >= ALL
    (SELECT y.area FROM world y
    WHERE y.continent=x.continent and area>0)

关于sql >=All 和 MAX 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28758403/

相关文章:

sql - Oracle:如何识别数据和模式更改

linux - 如何使用单独的 VM 服务器来托管数据库来安装 OIM 11gPS2

sql - 在oracle SQL中计算没有日历表的工作日(包括日期之间的假期)

sql - PostgreSQL 错误 : operator does not exist: date ~~ unknown

sql - 如何根据来自另一个表的多个值的组合来选择记录?

sql - 使用 CASE 语句检查表中是否存在列 - SQL Server

MySql、Postgres、Oracle 和 SQLServer 忽略 IS NOT NULL 过滤器

mysql - SQL查询获取最近的交易日期

python - 使用 pandas 写入 sql 数据库

sql - 在 Oracle 中评估一组数字的平均绝对偏差