2016-10-15 50 views
0

我有一个关于在表/查询中选择最大值的SQL问题。我试图返回从聚合表达式返回的最大值以及元组的关联主键。SQL - 检索关联的主键和查询的MAX值(值)

我能够返回1个元组,只显示最大值,当我只在select语句中包含聚合函数,但我无法返回只有一个元组与聚合表达式的主键和最大值。

这里是我的查询的示例:

SELECT id, MAX(SQRT((POWER((x-(-28)),2) + POWER((y-(151)),2)))) as distance 
FROM table 
GROUP BY id; 

正如你所预料这将返回所有的ID,并从功能的关联值。它不会返回具有最大值和关联ID的1个元组。

我能做些什么来解决这个问题?要做到这一点

回答

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