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 具有相同的最大值,这将随机选择其中一个。
我有一个 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 具有相同的最大值,这将随机选择其中一个。