SQL - 检索关联的主键和查询的MAX(值)值

时间:2016-10-15 04:55:24

标签: sql oracle max aggregate-functions greatest-n-per-group

关于在表/查询中选择最大值,我遇到了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个元组。

我该怎么做才能解决这个问题?

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