目录
验证函数
计算出公司的平均雇佣年限
求出最早和最晚的雇佣日期(找到公司最早雇佣的员工和最近雇佣的员工的雇佣日期)
统计bonus表
面试题
统计查询
Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
之前学习过一个函数叫count()函数,这个函数主要是统计一张数据表中的数据量的数量,与它功能类似的常用函数也是我接下来要讲的
● 求和: sum(),是针对数字的统计
● 平均值: avg(),是针对数字的统计
● 最小值: min(),各种数据类型都支持
● 最大值: max(),各种数据类型都支持
验证函数
SQL> select count(*) 人数,avg(sal) 员工平均工资,sum(sal) 每月总支出
2 from emp;
人数 员工平均工资 每月总支出
---------- ------------ ----------
13 2077.08333 24925
这些统计函数是允许和其他函数嵌套的
计算出公司的平均雇佣年限
SQL> select avg(months_between(sysdate,hiredate)/12)
2 from emp;
AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12)
----------------------------------------
42.5955973
这个查询中先使用 months_between() 函数计算出每位员工的雇佣年限,再使用 avg() 函数计算出平均值
求出最早和最晚的雇佣日期(找到公司最早雇佣的员工和最近雇佣的员工的雇佣日期)
SQL> select max(hiredate) 最晚,min(hiredate) 最早
2 from emp;
最晚 最早
-------------- --------------
23-1月 -82 17-12月-80
以上几个函数,在表中没有数据的时候,只有 count() 函数会返回结果,其他都是 null
统计bonus表
SQL> select count(*) 人数,avg(sal) 员工平均工资,sum(sal) 每月总支出,max(sal) 最高工资,min(sal) 最低工资
2 from bonus;
人数 员工平均工资 每月总支出 最高工资 最低工资
---------- ------------ ---------- ---------- ----------
0
可以清楚地发现,此时只有 count() 函数会返回最终的结果。即使没有数据也会返回 0,而其他 统计函数的结果都是 null
面试题
请解释 count(*)、count( 字段 )、count(distinct.字段 ) 的区别?
实际上,count() 函数有 3 种使用形式
●count(*) :可以准确地返回表中的全部记录数
●count( 字段 ) :统计不为 nul 的所有数据量
●count(distinct.字段 ) :消除重复数据之后的结果
统计查询
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
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
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
8989 HELLO
已选择 13 行。
先来看看emp数据表的内容共有 13 条记录、8 个字段
现在看看统计查询
SQL> select count(*),count(empno),count(comm)
2 from emp;
COUNT(*) COUNT(EMPNO) COUNT(COMM)
---------- ------------ -----------
13 13 4
可以看出count( 字段 ) 是统计不为nul的所有数据量,例如 count(empno)每个记录都有数据,而 count(com) 只有 4 个记录有数据
再来看下一个
SQL> select count(distinct job)
2 from emp;
COUNT(DISTINCTJOB)
------------------
5
显示的是 job 字段消除重复数据之后的结果