分组函数笔记

–Oracle自带用户scott用户,需要启用
show user–显示当前用户

desc emp–查看员工表结构

名称 空值? 类型


EMPNO NOT NULL NUMBER(4) --员工号
ENAME VARCHAR2(10) --姓名
JOB VARCHAR2(9) --职位
MGR NUMBER(4) --员工老板号
HIREDATE DATE --员工入职日期
SAL NUMBER(7,2) --员工月薪
COMM NUMBER(7,2) --员工奖金
DEPTNO NUMBER(2) --员工所在部门的部门号

select * from emp;

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 19-4月 -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 23-5月 -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

desc dept --部门级别表

名称 空值? 类型


DEPTNO NOT NULL NUMBER(2) --部门的部门号
DNAME VARCHAR2(14) --部门名称
LOC VARCHAR2(13) --部门地点

select * from dept;
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

desc salgrade–工资级别表

名称 空值? 类型


GRADE NUMBER --级别
LOSAL NUMBER --级别最低薪水
HISAL NUMBER --级别最高薪水

select *from salgrade;
GRADE LOSAL HISAL
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999

常用的分组函数
1.AVG平均值
2.SUM函数
3.MIN最小值
4.MAX最大值
5.COUNT计数
6.WM_CONCAT行转列函数
!!!–分组函数中会自动过滤空值
DISTINCT 去掉重复值
SQL>HOST CLS --清除屏幕的字
SQL>/ --重新执行上一条语句
SQL>ed 修改上面的查询语句
SQL>set linesize 200–设置宽度
SQL>col --设置列的宽度
select avg(sal),sum(sal) from emp;
select min(sal),max(sal) from emp;
select count(*) from emp;
select count(empno) from emp;
select count(distinct(deptno)) from emp;
select deptno,ename from emp ;
select deptno,wm_concat(ename) from emp;
select deptno,wm_concat(ename) from emp group by DEPTNO;

–统计员工的平均总工资
select (sum(sal) + sum(comm))/count() from emp ;
select avg(sal) + avg(comm) from emp;
–统计员工的工资
select sum(sal)/count(
) 一, sum(sal)/count(sal) 二, avg(sal) 三 from emp;
–统计员工的奖金
select sum(comm)/count() 一, sum(comm)/count(comm) 二, avg(comm) 三 from emp;
–奖金里含有空值,所以结果不一样
select count(
) ,count(comm) from emp;–分组函数中会自动过滤空值
–nvl函数使分组函数无法忽略空值
select sum(comm)/count(*) 一, sum(comm)/count(nvl(comm,0)) 二, avg(comm) 三 from emp;

group by 子句的使用:
–求出员工表中各部门的平均工资
select * from emp;
select distinct(deptno),avg(sal) from emp group by deptno;
select distinct(deptno),sum(sal)/count(DEPTNO) from emp group by deptno;
select sum(sal)/count(DEPTNO) from emp group by deptno;
select avg(sal) from emp group by deptno;
–讲义
select deptno,avg(sal)from emp group by deptno;
抽象:
select a,b,c,组函数(x)
from table
group by a,b,c;
语法:
在select列表中所有未包含在组函数中的列都应该包含在group by 子句中
包含在group by 子句中的列不必包含在select列表中

使用多个列分组:
目标 :按照部门、不同的职位,统计员工的工资总额
select deptno,job,sum(sal) from emp group by deptno,job;
select deptno,job,sum(sal) from emp group by deptno,job order by DEPTNO;(排序)

非法使用组函数:
select deptno,count(ename)
from emp;–deptno未在分组函数count()里面,所以错误
错误代码:ORA-00937:not a dingle-group gorup function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值