当我运行以下查询时,我得到了
ORA-00934:此处不允许使用群组功能
问题是什么?
select c.Numcom,c.Nompr,c.salaire_fix
from commercialv c,comercialv c1
where c.salaire_fix=(max(c1.salaire_fix) );
答案 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
,它也只会获得一行。在这种情况下,前两个查询将获得多行。