【问题标题】:SQL - Retrieve Associated Primary Key and Value of MAX(value) of QuerySQL - 检索查询的 MAX(value) 的关联主键和值
【发布时间】:2016-10-15 04:55:23
【问题描述】:

我在选择表/查询中的最大值时遇到了 SQL 问题。我正在尝试返回从聚合表达式返回的最大值以及元组的关联主键。

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

这是我的查询示例:

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

如您所料,这会从函数中返回所有 id 和相关值。它不会只返回 1 个具有最大值和关联 id 的元组。

我能做些什么来解决这个问题?

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多