Sql 从与其他列并列的计算列中选择“最大值”
我有一个表,它有ID列、FIELD1列、FIELD2列,所有这些列的类型都是NUMBER 我想在FIELD1和FIELD2上找到函数的最大值,并将其显示在ID旁边 我试着 但它返回的是Sql 从与其他列并列的计算列中选择“最大值”,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我有一个表,它有ID列、FIELD1列、FIELD2列,所有这些列的类型都是NUMBER 我想在FIELD1和FIELD2上找到函数的最大值,并将其显示在ID旁边 我试着 但它返回的是ORA-00937:没有一个组函数 我在中尝试了这些解决方案,但它们也有自己的错误 SELECT * FROM ( SELECT ID, SQRT(FIELD1 + FIELD2) AS CALC, RANK() OVER (ORDER BY CALC DESC) AS RANKING FR
ORA-00937:没有一个组函数
我在中尝试了这些解决方案,但它们也有自己的错误
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 Express Edition 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具有相同的最大值,这将随机选择其中一个。哎呀,对不起。我把第二个例子写错了。它应该是SELECT ID,MAX(SQRT(FIELD1+FIELD2)作为计算。但无论如何,不,你的答案不是我想要的。我想要返回一个结果,表中最高的一个。你例子中的GROUP BY打印出数百个结果。@JimCullen-注意,这个查询做不同的事情,例如第一个可以返回多行,第二个不能返回第一行如果有多行绑定到CALC的最高值,是否返回多个答案?是,第一次查询将返回CALC的最大值记录,因此,如果有多条最大值记录,则将获取所有记录。即使CAL的最大值有多个ID,secord查询也只会给出该记录这取决于你决定用哪一个来做你的工作requirement@hemalp108-您确定在第二个查询中需要MAX和GROUP吗?如果您使用订单,聚合不是无用吗?
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