关于在表/查询中选择最大值,我遇到了SQL问题。我试图返回从聚合表达式返回的最大值以及元组的关联主键。
当我只在select语句中包含聚合函数时,我能够返回仅显示最大值的1元组,但是我无法仅返回1个元组,其中包含主键和聚合表达式的最大值。
以下是我的查询示例:
SELECT id, MAX(SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2)))) as distance
FROM table
GROUP BY id;
正如您所期望的那样,它会返回所有id以及函数中的关联值。它不会返回具有最大值和关联id的1个元组。
我该怎么做才能解决这个问题?
答案 0 :(得分:1)
执行此操作的一种方法是按降序排序,只选择第一行:
select id, distance
from (select id, SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2))) as distance
from table
order by distance desc)
where rownum < 2
从Oracle 12c开始,您还可以利用fetch first n rows
语法来完成同样的事情:
select id, SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2))) as distance
from table
order by distance desc
fetch first row only
如果多行共享相同的最大距离值,您还可以方便地调整语法以支持关系:
select id, SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2))) as distance
from table
order by distance desc
fetch first row with ties