须要注意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经典实例》第七章