这里不允许使用组功能

时间:2015-01-21 21:53:19

标签: sql oracle sqlplus

当我运行以下查询时,我得到了

  

ORA-00934:此处不允许使用群组功能

问题是什么?

select c.Numcom,c.Nompr,c.salaire_fix
from commercialv c,comercialv c1
where c.salaire_fix=(max(c1.salaire_fix) );

3 个答案:

答案 0 :(得分:10)

您不能在WHERE子句中使用聚合函数。

根据您的用例,您可能需要子查询:

select c.Numcom,c.Nompr,c.salaire_fix
from commercialv c
where c.salaire_fix=(select max(salaire_fix) from comercialv);

理性是聚合函数适用于。另一方面,WHERE子句只能访问一行的数据。

答案 1 :(得分:3)

您可以使用分析函数执行所需操作:

select Numcom, Nompr, salair_fix
from (select c.Numcom, c.Nompr, c.salaire_fix,
             max(c.salaire_fix) over () as maxs
      from commercialv c
     ) c
where c.salaire_fix = c.maxs;

对于您的查询,where子句中不允许使用聚合函数。

答案 2 :(得分:0)

您也可以使用MAX()作为窗口函数(或者如果您更喜欢Oracle术语的分析函数)来执行此查询:

SELECT numcom, nompr, salaire_fix FROM (
    SELECT numcom, nompr, salaire_fix, MAX(salaire_fix) OVER ( ) AS max_salaire_fix
      FROM commercialv
) WHERE salaire_fix = max_salaire_fix;

您也可以使用RANK()

SELECT numcom, nompr, salaire_fix FROM (
    SELECT numcom, nompr, salaire_fix, RANK() OVER ( ORDER BY salaire_fix DESC ) AS salaire_fix_rank
      FROM commercialv
) WHERE salaire_fix_rank = 1;

甚至ROWNUM

SELECT * FROM (
    SELECT numcom, nompr, salaire_fix
      FROM commercialv
     ORDER BY salaire_fix DESC
) WHERE rownum = 1;

最后一个唯一的困难是,即使有其他行的最大值为salaire_fix,它也只会获得一行。在这种情况下,前两个查询将获得多行。