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經典實例》第七章
相關文章
相關標籤/搜索