須要注意null值的問題。
例如考慮以下表:函數
create table t2(sal integer); insert into t2 values(10); insert into t2 values(20); insert into t2 values(null);
若是採用以下查詢:spa
select avg(sal) from t2;
獲得:code
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;
select count(*), count(deptno), count(comm), count('hello') from emp;
select deptno, count(*), count(deptno), count(comm), count('hello') from emp group by deptno;
實際上,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;
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;
《SQL經典實例》第七章