ORA-00979 GROUP BY 表达式错误的解释

直接说应该怎么做,至于为什么我不知道,
原因是:
因为把select 列表项的中列忘了写在group by中。于是就出现了以上的错误ORA-00979 不是GROUP BY 表达式。
所以我们要把在select 列表项的字段写在group by中
这里参考一下别人SQL代码样例:

select deptno,job,avg(sal)  from emp
group by deptno;

ERROR 位于第 1 行:

ORA-00979: 不是 GROUP BY 表达式

这里就是因为在select 列表像中出现了像deptno和job,而在group by中并没有出现的缘故。

以上的错误纠正为:

Select deptno,job,avg(sal) from emp

Group by deptno,job;

这是正常情况下的问题,
我的问题是我在case … when 时使用group by 出现问题
代码与截图重点如下:

select  sy.period,sy.prod_code ,
                               case when pr.STARTTIME !=null then pr.STARTTIME else pr.EFFDATE end as starttime ,
                                sum(sy.complaint_fee + sy.faul_fee) faulfee
                        from ai_balance_detail_sync_202012 sy --修改日期
                        left join ai_product pr on pr.PRODUCT_CODE = sy.prod_code
                         where
                          -- 筛选detail表中数据只有等级为B的数据
                           exists (  select PRODUCT_CODE  from  (select pr.PRODUCT_CODE 
                           from AI_LEVEL_CERTIFICAT_SYNC sync left join ai_product pr on sync.PRODUCT_ID  =pr.id where sync.CERTIFICATION_LEVEL = 'B' ) cc where cc.PRODUCT_CODE =  sy.prod_code )
                           and is_group_srv = '1' and BILL_CYCLE_ID='202012' and prod_code is not null  --修改日期
                           group by period,prod_code,starttime 

在这里插入图片描述

我以为我这样的写法完全符合在select 列表项的字段写在group by中,
其实是不对的,我需要把 pr.STARTTIME 和 pr.EFFDATE 等两个字段都写在gruop by中
正确答案如下:
在这里插入图片描述

如此解决了我在case … when 情况下 的group by 问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值