Aggregating data using group functions

主要聚合函数有几个:

MAX,MIN,AVG,SUM,COUNT.主要还是联合起来用比较复杂,但看都简单。这几个aggregating函数都对空值忽略。

1.求所有员工平均值

有个典型的例子是求平均值,如果你直接使用

Select avg(bonus) from emp;

得到的结果将会是那些得到奖励的人中的平均奖励额。而老板要求的是统计出全公司所有员工的奖励平均额。这是你应该使用NVL函数来把那些没有拿到奖励的员工也强行加入进来。

例如:

Select avg(NVL(bonus,0)) from emp;

 

2.group by的使用

使用aggregating函数必须使用group by,如果select 语句中有字段但是没有出现在group by中就会报错!会提示不是group by表达式。

Any column or expression in the select list that is not an aggregate function must be in the group。最近做webi报表也是用到了group by就十分方便。因为webi中是不能自动帮你做时间维度的层级关系,必须自己做。如果表中只有最细粒度的时间,如果做年,月,日维度的钻取了?我就用到了group by,将时间截取到月在group by substr(date,1,6)即可达到月份的聚合。

 

3. 对聚合的限制having

如果我们相对聚合进行限制如何做了?

select department_id,AVG(salary)

from employess

where AVG(salary) > 8000

group by department_id。

是不对的,必须用having。如下例子:

select bzirk,avg(zzfkimg)
from s901
where sptag = '20041010'
group by bzirk
having avg(zzfkimg) > 100;

不过这种语句在abap中几乎没有用到,abap写的报表全部都是展示数据没有对数据进行筛选。bo的报表中估计用的多的也是alert。

 

4. nesting  group functions

嵌套估计用的更少,如下:

select count(distinct bukrs)
from t001
where bukrs = '1000';

这个如果不加上distinct的话有几个client就有几个值,加上了distinct就只有一个值。

下面又是一个例子:

Select max(avg(zzfkimg))
from s901
where sptag = '20041010'
group by bzirk;

我平常使用嵌套两层是最多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值