现实中每个人都有工资,但是努力工作但人可以得到奖金。工资常有而奖金不常有。是故讲分组函数与空值。
举个栗子。哇咔咔。
统计员工的平均工资【工资人人有份哦】
select sum(sal)/count(*) from emp;
select sum(sal)/count(sal) from emp;
select avg(sal) from emp;
以上SQL的结果都是一样的哦。
统计员工的平均奖金【奖金不是人人都有的哦】
select sum(comm)/count(*) a , select sum(comm)/count(comm) b , select avg(comm) c from emp;
结果是b、c相同与a不同,原因就是因为comm这一列中包含空值。也就是说count(*)和 count(sal)是不一样的。
select count(*),count(comm) from emp;
count(*)是有14条,而count(comm)只有4条
我们可以得到一个结论就是分组函数是会自动忽略空值的
select count(*),count(nvl(comm,0)) from emp;
nvl函数的作用,如果第一个函数为空的话返回第二个函数,如果不为空返回第一个函数自己
以后要根据实际需要决定分组函数要不要加nvl
网友评论