oracle多行相加,ORACLE单行函数与多行函数之七:多行函数之分组函数示例

多行函数: 从一组记录中返回一条记录,可出现在select列表、ORDER BY和HAVING子句中 通常都可用DISTINCT过滤掉重复的记录,默认或用ALL来表示取全部记录 无论是否过滤重复记录, NULL在聚合函数中总是不被计算,被忽略。 主要函数: –COUNT –MIN和MAX –A

多行函数:

从一组记录中返回一条记录,可出现在select列表、ORDER BY和HAVING子句中

通常都可用DISTINCT过滤掉重复的记录,默认或用ALL来表示取全部记录

无论是否过滤重复记录,NULL在聚合函数中总是不被计算,被忽略。

主要函数:

–COUNT

–MIN和MAX

–AVG和SUM---只可用于数值型

1.COUNT统计行数函数,及where、group by、having的应用。

NULL值被过滤掉,不计入统计。

BYS@bys1>select count(*), count(comm) from emp;

COUNT(*) COUNT(COMM)

---------- -----------

14 4

按部门号分组,统计每个部门的员工数。

BYS@bys1>select deptno,count(empno) from emp group by deptno;

DEPTNO COUNT(EMPNO)

---------- ------------

30 6

20 5

统计每个部门的员工数,不统计empno=7788的员工

BYS@bys1>select deptno,count(empno) from empwhere empno!=7788 group by deptno;

DEPTNO COUNT(EMPNO)

---------- ------------

30 6

20 4

10 3

统计每个部门的员工数,不统计empno=7788的员工,统计完后不显示deptno为10的部门。

BYS@bys1>select deptno,count(empno) from emp where empno!=7788 group by deptno having deptno!=10;

DEPTNO COUNT(EMPNO)

---------- ------------

30 6

20 4

2.SUM求和,只可用于数值型

求所有员工工资和

BYS@bys1>select sum(sal) from emp;

SUM(SAL)

----------

29025

统计每个部门的工资总和,不统计EMPNO=7788的员工工资,同时统计完后不显示DEPTNO为10的部门。

BYS@bys1>select deptno,sum(sal) from emp where empno!=7788 group by deptno having deptno!=10;

DEPTNO SUM(SAL)

---------- ----------

30 9400

20 7875

3.AVG求平均数,只可用于数值型

BYS@bys1>select avg(sal) from emp;

AVG(SAL)

----------

2073.21429

BYS@bys1>select deptno,avg(sal) from emp where empno!=7788 group by deptno having deptno!=10;

DEPTNO AVG(SAL)

---------- ----------

30 1566.66667

20 1968.75

4.max和min:求最大和最小值

BYS@bys1>select deptno,max(sal),min(sal) from emp where empno!=7788 group by deptno having deptno!=10;

DEPTNO MAX(SAL) MIN(SAL)

---------- ---------- ----------

30 2850 950

20 3000 800

BYS@bys1>select max(sal),min(sal) from emp;

MAX(SAL) MIN(SAL)

---------- ----------

5000 800

5.GROUP BY分组,可以指定一列或多列。多列时,先按第一列分组,然后在分组中,如果有符合第二列的,再进行分组。

关于GROUP BY及rollup和cube参数,更详细的在:http://blog.csdn.net/q947817003/article/details/13904763

BYS@bys1>select deptno,job,max(sal),min(sal) from emp where empno!=7788 group by deptno,job having deptno!=10;

DEPTNO JOB MAX(SAL) MIN(SAL)

---------- --------- ---------- ----------

20 CLERK 1100 800

30 SALESMAN 1600 1250

20 MANAGER 2975 2975

30 CLERK 950 950

30 MANAGER 2850 2850

20 ANALYST 3000 3000

6.HAVING,用于在分组后的结果中进行过滤。可以在HAVING中使用分组函数。在WHERE中不行。因为WHERE执行时,尚未分组,而HAVING时,已经分组完成。

HAVING与WHERE比较说明更详细在:http://blog.csdn.net/q947817003/article/details/13622215

求部门平均工资大于2000的部门编号。

BYS@bys1>select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

DEPTNO AVG(SAL)

---------- ----------

20 2175

10 2916.66667

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值