从计算列中选择最大值以及其他列

时间:2016-10-24 07:50:28

标签: sql oracle greatest-n-per-group

我有一个包含列ID,FIELD1,FIELD2的表,所有类型都是NUMBER。

我想在FIELD1和FIELD2上找到函数的MAX,并在ID旁边显示。

我试试

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

但它会返回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。

我怎样才能让它发挥作用?感谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试以下两个查询。

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;

答案 1 :(得分:0)

如果您需要一个值,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具有相同的最大值,则会随机选择其中一个。