SQL经典实例(七)数值处理

计算平均值

须要注意null值的问题。
例如考虑以下表:函数

create table t2(sal integer);
insert into t2 values(10);
insert into t2 values(20);
insert into t2 values(null);

clipboard.png

若是采用以下查询:spa

select avg(sal) from t2;

获得:code

clipboard.png

avg()函数会忽略null值。若是想把null值考虑在内,应使用coalesce()函数:ip

select avg(coalesce(sal, 0)) from t2;

coalesce()函数会返回其参数列表中第一个非null的值,若是sal为null,则返回0;it

计算行数

应注意,当把列名称做为参数的时候,count函数会忽略null值,而使用符号*或者常量参数的时候,就会包含null。考虑以下结果集:table

select rownum, deptno, comm from emp;

clipboard.png

select count(*), count(deptno), count(comm), count('hello') from emp;

clipboard.png

select deptno, count(*), count(deptno), count(comm), count('hello') 
    from emp
group by deptno;

clipboard.png

实际上,count(*) 是在统计行数(无论实际的值是什么,因此null值与非null值都会计入总数),而针对某一列执行count操做,咱们实际是在计算该列非null值的个数。class

累计求和

计算全体员工工资的累计额。
Oraclecli

select ename, sal,
       sum(sal) over (order by sal, empno) as running_total
    from emp
order by sal;

clipboard.png

MySQLselect

select e.ename, e.sal,
       (select sum(d.sal) from emp d
        where d.empno <= e.empno) as running_total
    from emp e
order by running_total;

clipboard.png

《SQL经典实例》第七章
相关文章
相关标签/搜索