Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从与其他列并列的计算列中选择“最大值”_Sql_Oracle_Greatest N Per Group - Fatal编程技术网

Sql 从与其他列并列的计算列中选择“最大值”

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

我有一个表,它有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
    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