设为首页 加入收藏

TOP

Oracle学习(4):分组函数(一)
2015-11-21 02:01:18 来源: 作者: 【 】 浏览:2
Tags:Oracle 学习 分组 函数

分组函数

什么是分组函数?

分组函数作用于一组数据,并对一组数据返回一个值

组函数的类型

l AVG l COUNT l MAX l MIN l SUM

数值求和

SQL> --求员工工资总额

SQL> select sum(sal) from emp;


SUM(SAL)
----------
29025


求数据条数

SQL> --求员工的人数
SQL> select count(*)from emp;


COUNT(*)
----------
14

求平均

SQL> --平均工资
SQL> select sum(sal)/count(*) 方式一, avg(sal) 方式二 from emp;


方式一 方式二
---------- ----------
2073.21429 2073.21429


SQL> --奖金的平均值
SQL> select sum(comm)/count(*) 方式一,sum(comm)/count(comm) 方式二, avg(comm) 方式三
2 from emp;


方式一 方式二 方式三
---------- ---------- ----------
157.142857 550 550


SQL> select count(*), count(comm) from emp;


COUNT(*) COUNT(COMM)
---------- ----------- (组函数自动滤空)
14 4


SQL> select * from emp;


EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------- --------- ---------- -------------- ----- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 13-7月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 13-7月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 FORD ANALYST 7566 03-12月-81 3000 20
7934 MILLER CLERK 7782 23-1月 -82 1300 10


已选择14行。

组函数自动滤空

SQL> --组函数自动滤空
SQL> select count(*), count(nvl(comm,0)) from emp;


COUNT(*) COUNT(NVL(COMM,0))
---------- ------------------
14 14

最大最小值

SQL> --最高工资 最低工资
SQL> select max(sal),min(sal) from emp;


MAX(SAL) MIN(SAL)
---------- ----------
5000 800


SQL> host cls

分组数据

group by分组

SQL> --group by分组:求各个部门的平均工资
SQL> select deptno,avg(sal)
2 from emp
3 group by deptno;


DEPTNO AVG(SAL)
---------- ----------
30 1566.66667
20 2175
10 2916.66667


SQL> ed
已写入 file afiedt.buf


1 select deptno,job,avg(sal)
2 from emp
3 group by deptno,job
4* order by 1
SQL> /


DEPTNO JOB AVG(SAL)
---------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 ANALYST 3000
20 CLERK 950
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 1400


已选择9行。

**********************************************************************************************

注意:

在SELECT列表中所有未包含在组函数中的列都应该包含

在GROUPBY子句中。

包含在GROUPBY 子句中的列不必包含在SELECT 列表中

**********************************************************************************************

group by作用于多列

SQL> --group by作用于多列:先按照第一列分组;如果相同,再按照第二列分组
SQL> select deptno,avg(sal)
2 from emp
3 group by deptno
4 having avg(sal)>2000;


DEPTNO AVG(SAL)
---------- ----------
20 2175
10 2916.66667

having:在分组的基础上,再过滤

SQL> --having:在分组的基础上,再过滤
SQL> select deptno,avg(sal)
2 from emp
3 group by deptno
4 where depno=10;
where depno=10
*
第 4 行出现错误:
ORA-00933: SQL 命令未正确结束
**********************************************************************

(where后面不能跟组函数!!!)

不能在 WHERE 子句中使用组函数(注意)。 可以在 HAVING 子句中使用组函数。 **********************************************************



SQL> ed
已写入 file afiedt.buf


1 select deptno,avg(sal)
2 from emp
3 where deptno=10
4* group by deptno
5 /


DEPTNO AVG(SAL)
---------- ----------
10 2916.66667


SQL> select deptno,avg(sal)
2 from emp
3 group by deptno
4 having deptno=10;


DEPTNO AVG(SAL)
---------- ----------
10 2916.66667
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇oracle分组查询 下一篇Oracle学习(1):基本语法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: