我有一个包含列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。
我怎样才能让它发挥作用?感谢。
答案 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具有相同的最大值,则会随机选择其中一个。