当前位置: 首页 > 面试题库 >

值> =全部(选择v2')与值=(选择max(v2)')产生不同的结果

苏选
2023-03-14
问题内容

偶然(在一个答案的帮助下),我找到了正确解决方案的方法。问题是我不明白为什么它们会产生不同的结果。

因此,数据库具有以下架构:

在此处输入图片说明

而我在寻找一切从模型PCPrinterLaptop最高
价格。所有这些表都可能具有非唯一model列,因为不同的项目code可能具有相同的模型。

我最初的解决方案是:

with model_price(model,price) as (
select model,price 
from PC

union

select model,price 
from Laptop

union

select model,price 
from Printer
)

select model
from model_price
where price >= all(select price from model_price)

结果不正确-系统返回* Wrong number of records (less by 2)

正确的解决方案是这样的:

with model_price(model,price) as (
select model,price 
from PC

union

select model,price 
from Laptop

union

select model,price 
from Printer
)

select model
from model_price
where price = (select max(price) from model_price)

那么,为什么与溶液all产生不同的结果呢?

关于sql引擎:Now we use Microsoft SQL Server 2012 on the rating stages, and MySQL 5.5.11, PostgreSQL 9.0, and Oracle Database 11g on the learn stage in addition. 因此,我不知道他们确切地使用了哪个引擎来评估本练习。


问题答案:

create table t (f int null);

select 1 where 1 >= (select max(f) from t); -- 1
select 1 where 1 >= all(select f from t);   -- 2

insert into t values (null), (0);

select 1 where 1 >= (select max(f) from t); -- 3
select 1 where 1 >= all(select f from t);   -- 4

http://www.sqlfiddle.com/#!6/3d1b1/1

第一个不select返回任何内容,第二个select返回1

MAX返回标量值。如果不存在任何行,则MAX返回NULL1 >= NULL在第1行上,1 >= all fs不成立。另一方面,s是成立,因为根本没有f条件 成立的s 。

第三次select返回1,第四次不select返回任何内容。

MAX像所有聚合函数一样,忽略NULLMAX(f)在第3行上为0,并且1 >= 0为true。ALL否:它1 >= NULL AND 1 >= 0在第4行求值,这是不正确的。



 类似资料:
  • 问题内容: 我有一张这样的桌子: 我需要这样的输出(与最大值分组): 试图使用像这样的东西: 但是它只选择一个具有最大值的行。如何重写查询? 问题答案: 使用ROW_NUMBER对记录进行排名,以便sku的最大值变为#1。然后仅保留那些排名第一的记录。 对于SKU 1503818,您将获得以下两个之一: 如果您想要一个特定的商品(例如商品编号更高的商品),则将此条件添加到Row_Number的OR

  • 我实现了执行器endpoint,如下所示: 如果我试图访问http://localhost:9992/admin/test/filter/configurator/true,则缺少参数:enable。参考附件截图。 遗漏参数

  • 问题内容: 我有一个Access 2010数据库,其中存储源计算机和目标计算机的IP地址。如果我的数据库中有以下条目 是否有任何查询来选择唯一对?也就是说,查询的输出应为 问题答案: 您的问题似乎暗示两件事: 列出源/目标对时,您只想查看一个方向上的对,例如(A,B),而不是(B,A)。 该列表应省略源和目标相同的对,例如(D,D) 在这种情况下,查询… …针对包含…的[SomeTable]运行时

  • 问题内容: 假设我有这个(MySQL)数据库,按增加的时间戳排序: 如何从该系统的上一行中选择StatusA更改的行?StatusB无关紧要(我在此问题中展示它只是为了说明每个系统可能有许多连续的行,其中StatusA不变)。在上面的示例中,查询应返回2011-01-03行(对于SystemA,StatusA在2011-01-01和2011-01-03之间更改),2011-01-06、2011-0

  • 问题内容: 我有一个查询,可以从弹性索引中获取一些用户发布的数据。我对该查询感到满意,尽管我需要使其返回具有唯一用户名的行。当前,它显示用户的相关帖子,但是可能显示一个用户两次。 我已经阅读了有关聚合的内容,但了解得不多(也尝试使用aggs但也没有用)....非常感谢您的帮助 问题答案: 您将需要使用术语汇总来获取所有唯一身份用户,然后使用热门匹配来针对每个用户仅获取一个结果。这就是它的样子。 在

  • 我正在尝试从一个select表单中获取一个时间值。我在代码中看不到任何错误,尝试更改所有类名和变量,但值仍然没有被get select。(提交表单后我看不到所选的值) 代码添加如下: