我希望使用所有命令查找评分最高的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)
但它没有给出相同的结果。
我的错误是什么?我该如何规范?
答案 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 NULL
或NOT 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 ;