找到没有聚合函数的最大值

时间:2013-03-24 20:25:37

标签: sql max

我在SQL中有一个表的以下模式。

Owner (ownerid, name, phone, age)

我被要求写一个语句来查找数据库中最老的所有者,而不使用任何聚合函数,如MAX。我也不允许使用任何特定于任何DBMS的东西。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用EXISTS运算符,它是所有符合SQL的RDBMS的标准运算符:

SELECT age
FROM Owner o1
WHERE NOT EXISTS (SELECT 1 FROM Owner o2 WHERE o2.age > o1.age)

此查询背后的想法是不言自明的:最早的所有者是这样的所有者o1,没有其他所有者o2o2早于o1 }。

答案 1 :(得分:0)

您还可以使用 NOT IN JOIN 运算符,这是所有SQL兼容RDMS的标准操作符。

select age from owner where age not in (select o2.age from owner as o1 JOIN owner as o2 ON o1.age > o2.age);

答案 2 :(得分:0)

另一种选择是使用ALL运算符:

select o1.*
from "owner" o1
where age > all (select age 
                 from "owner" o2
                 where o2.ownerid <> o1.ownerid);

本质上,它会找到年龄大于所有年龄值的所有者(除了我们正在寻找的年龄之外)。