加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

聚合查询的用法(当有sum/avg)这些函数时的用法

发布时间:2020-12-13 22:42:08 所属栏目:百科 来源:网络整理
导读:当一个语句中有sum/ave这样的函数时,在库中进行查询时,容易出现“ORA-00937: 非单组分组函数”这样的错误,这是因为在聚合查询列中,有没有聚合的列:如 Select 井号,TO_CHAR(生产日期,'yyyy'),'mm'),sum(生产时间),avg(yy),avg(yt),avg(jt),avg(bt),sum(c

  当一个语句中有sum/ave这样的函数时,在库中进行查询时,容易出现“ORA-00937: 非单组分组函数”这样的错误,这是因为在聚合查询列中,有没有聚合的列:如

Select 井号,TO_CHAR(生产日期,'yyyy'),'mm'),sum(生产时间),avg(yy),avg(yt),avg(jt),avg(bt),sum(cql),avg(ly),avg(jy),bz,sum(zql) 
from 生产数据 
where TO_CHAR(生产日期,'yyyy-mm-dd')>='2014-01-01' and TO_CHAR(生产日期,'yyyy-mm-dd')<='2014-12-04' and 变量='XXX' ;

上面的语句在sqlplus中运行后,就会出现

第 1 行出现错误:
<span style="color:#ff0000;"><strong>ORA-00937: 非单组分组函数</strong></span>

分析下上面的语句,其中有井号、生产时间、bz这几个列是没有聚合的,所以在查询列中出现,就必然出现上面的错误提示。

要解决这个问题,我发现了一个比较直接的方法就是用group by分组,把查询列中没有聚合的列,都放到这个分组中,如:

group by 井号,'mm')
在前面的语句中,加上面那句,因为还有一项bz不是聚合的,所以还会出现错误提示:
<span style="color:#ff0000;"><strong>ORA-00979: 不是 GROUP BY 表达式</strong></span>
所以必须在上面的语句中,加入bz这个列才行:group by 井号,bz

这个查询语句完整语句应该是
Select 井号,'yyyy-mm-dd')<='2014-12-04' and 变量='XXX' ;
group by 井号,bz
p 这样就没有问题了,这也是不菲的代价换来的,花了我好几天的时间才把这点搞明白。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读