Select 计算列和其他列的最大值

Select max from calculated column alongside other columns

我有一个 table,其中包含列 ID、FIELD1、FIELD2,所有类型均为 NUMBER。

我想在 FIELD1 和 FIELD2 上找到函数的最大值,并将其与 ID 一起显示。

我试试

SELECT ID, MAX(SQRT(FIELD1 + FIELD2)) AS CALC
FROM TABLE;

但是 returns ORA-00937: not a single-group group function.

我尝试了 this thread 中的解决方案,但它们都有自己的错误。

SELECT * FROM (
    SELECT ID, SQRT(FIELD1 + FIELD2) AS CALC,
    RANK() OVER (ORDER BY CALC DESC) AS RANKING
    FROM TABLE
)
WHERE RANKING = 1;

报错

ORA-06553: PLS-306: wrong number or types of arguments in call to
'OGC_CALC'

也是

SELECT ID, SQRT(FIELD1 + FIELD2) AS CALC
FROM TABLE
WHERE CALC = (
    SELECT MAX(CALC)
    FROM TABLE
);

使用 Oracle Database 11g 快捷版 11.2.0.2.0 版。

我怎样才能让它工作?谢谢。

你能试试下面两个查询吗

SELECT ID,FIELD1,FIELD2,SQRT(FIELD1 + FIELD2) AS CALC
FROM   TABLE WHERE SQRT(FIELD1 + FIELD2)= (SELECT MAX(SQRT(FIELD1 + FIELD2)) FROM TABLE);

或者, 由 Aleksej 建议,不使用聚合或按函数分组。

SELECT *
FROM (
        SELECT ID, 
               SQRT(FIELD1 + FIELD2)
        FROM TABLE
        ORDER BY 2 DESC
        )
    WHERE ROWNUM=1;

初始查询,

SELECT *
FROM (
    SELECT ID, 
           MAX(SQRT(FIELD1 + FIELD2)) AS CALC
    FROM TABLE
    GROUP BY ID
    ORDER BY 2 DESC
    )
WHERE ROWNUM=1;

如果你需要一个单一的值,在ID的所有值中最大sqrt(field1+field2),有两种可能的方式:

select *
from (
      select *
      from yourTable
      order by sqrt(field1 + field2) desc
     )
where rownum = 1           

select id, field1, field2
from (
        select t.*,
               row_number() over ( order by sqrt(field1 + field2) desc) as rn
        from yourTable t
      )
where rn = 1  

请注意,如果您有多个 ID 具有相同的最大值,这将随机选择其中一个。