在sql中使用ALL命令而不是MAX命令

时间:2012-11-11 09:05:16

标签: sql sql-server

我希望使用所有命令查找评分最高的sids

我通过编写

命令max找到它
select S.sid,S.sname 
from Sailors S 
where S.rating = (select max(S1.rating) from Sailors S1)

但我也希望通过使用all命令找到它,所以我通过编写

来编写它
select S.sid,S.sname 
from Sailors S 
where  S.rating > all (select S.rating from Sailors S)

但它没有给出相同的结果。

我的错误是什么?我该如何规范?

2 个答案:

答案 0 :(得分:6)

您只需将查询修改为以下内容:

select S.sid,S.sname 
from Sailors S 
where  S.rating >= all (select S.rating from Sailors S)

虽然Mahmoud在某种程度上是正确的,但目前你的情况有什么问题,增加相等的可能性会给你MAX查询的相同行为,因为集合中的每个元素必须大于或等于它自己。 (Mahmoud指出,任何元素都不能超过自身是准确的。)

请参阅Mahmoud提供的this SQLfiddle

正如ypercube在注释中指出的那样,如果列中的任何值为NULL,则此方法不起作用。如果您修改子查询以指定WHERE rating IS NOT NULLNOT NULL列,它仍然可以正常工作。

答案 1 :(得分:2)

在SQL-Server中,您还可以简单地使用ORDER BY结合TOP (1) WITH TIES 规范:

SELECT TOP (1) WITH TIES
    S.sid, S.sname 
FROM Sailors S 
ORDER BY S.rating DESC ;