oracle 此处不允许使用组函数

gr8qqesn  于 2023-08-03  发布在  Oracle
关注(0)|答案(5)|浏览(127)

当我运行以下查询时,我得到
ORA-00934:此处不允许使用组函数
有什么问题吗?

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

字符串

mefy6pfw

mefy6pfw1#

不能在WHERE子句中使用聚合函数。
考虑到你的用例,你可能需要一个子查询:

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

字符串
合理的是,聚合函数在一个 * 集合 * 上工作。另一方面,WHERE子句只能访问 one row 的数据。

sr4lhrrt

sr4lhrrt2#

你可以用解析函数做你想做的事情:

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子句中不允许使用聚合函数。

vql8enpb

vql8enpb3#

您也可以使用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的其他行,它也只能得到一行。在这种情况下,前两个查询将得到多行。

8ulbf1ek

8ulbf1ek4#

你不能在where子句中使用group函数,所以你可以使用having子句。示例如下:

SELECT DEPTNO,COUNT(*)
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) >= 2;

字符串

dtcbnfnu

dtcbnfnu5#

我在Oracle中发现,当只需要一列时,Oracle不会遵守group。我使用这个语法:

SELECT count(column) as "Sum of Count in column", column from table where column = <some matching criteria> 
group by column order by count(column) DESC

字符串

相关问题