ORA-00979:不是sql developer中的GROUP BY表达式
此查询抛出一个错误。函数和分组依据不能同时使用?您需要在ORA-00979:不是sql developer中的GROUP BY表达式,sql,oracle,group-by,Sql,Oracle,Group By,此查询抛出一个错误。函数和分组依据不能同时使用?您需要在分组依据中包含完整的表达式 SELECT DISTINCT s.spriden_id, swkadfu.goremal_email_address(spriden_pidm,'TAMU','goremal_email_address') AS email, sum(tbraccd_amount) from tbraccd join spriden s on s.spriden_pi
分组依据中包含完整的表达式
SELECT DISTINCT
s.spriden_id,
swkadfu.goremal_email_address(spriden_pidm,'TAMU','goremal_email_address') AS email,
sum(tbraccd_amount)
from tbraccd
join spriden s on s.spriden_pidm = tbraccd_pidm
AND s.spriden_ntyp_code = 'UIN'
AND s.spriden_change_ind = 'I'
group by spriden_id,swkadfu.goremal_email_address
having sum(tbraccd_amount) >='20000';
这里有一个你错过的例子
首先,功能:
group by spriden_id, wkadfu.goremal_email_address(spriden_pidm,'TAMU','goremal_email_address')
正确地称之为:
- 所有未聚合的列都应
- 在您的例子中,它们是
e.ename
,e.deptno
(这是函数的一个参数;函数本身可以,但不必是group by
子句的一部分;这取决于您期望的结果。如果省略整个函数,代码将执行)
- 如果有
分组依据
,则不需要使用distinct
;不会伤害任何东西,但也不会有帮助<代码>分组依据将确保返回不同的值
- summary返回一个数字,因此-不要将该条件括在单引号中,即它应该是
=20000
,而不是='20000'
看起来是这样的:
SQL> create or replace function goremal (par_deptno in number, par_null in varchar2)
2 return varchar2
3 is
4 retval dept.dname%type;
5 begin
6 select dname into retval
7 from dept
8 where deptno = par_deptno;
9
10 return retval;
11 end;
12 /
Function created.
SQL> select e.ename,
2 goremal(e.deptno, null) as dept_name,
3 sum(e.sal) sum_sal
4 from emp e
5 group by e.ename, e.deptno
6 having sum(e.sal) > 100;
ENAME DEPT_NAME SUM_SAL
---------- --------------- ----------
SMITH RESEARCH 800
JONES RESEARCH 2975
FORD RESEARCH 3000
CLARK ACCOUNTING 2450
<snip>
为什么在同一个查询中同时使用DISTINCT
和聚合函数(SUM
)?不能按函数分组。在函数使用的字段上尝试使用group by。@在尝试使用group by之前,我使用了distinct。。谢谢你的指点谢谢你的详细说明。。。非常有帮助。。将尝试此操作尝试基于wkadfu.goremal\u电子邮件地址(spriden\u pidm、'TAMU'、'goremal\u email\u address')的函数索引。
。语法有点正确,除了下划线。我真的不知道:swkadfu.goremal_email_地址(spriden_pidm,'TAMU,'goremal_email_address')应该是。。。
select s.spriden_id,
swkadfu.goremal_email_address(spriden_pidm,'TAMU','goremal_email_address') as email,
sum(tbraccd_amount)
from tbraccd
join spriden s on s.spriden_pidm = tbraccd_pidm
and s.spriden_ntyp_code = 'UIN'
and s.spriden_change_ind = 'I'
group by spriden_id,
spriden_pidm
having sum(tbraccd_amount) >= 20000;
SELECT
s.spriden_id,
swkadfu.goremal_email_address(
spriden_pidm, 'TAMU', 'goremal_email_address'
) AS email,
sum(tbraccd_amount)
from
tbraccd
join spriden s on s.spriden_pidm = tbraccd_pidm
AND s.spriden_ntyp_code = 'UIN'
AND s.spriden_change_ind = 'I'
group by
s.spriden_id,
swkadfu.goremal_email_address(
spriden_pidm, 'TAMU', 'goremal_email_address'
)
having
sum(tbraccd_amount) >= '20000';