计算平均值
需要注意null值的问题。
例如考虑如下表:
create table t2(sal integer);
insert into t2 values(10);
insert into t2 values(20);
insert into t2 values(null);
如果采用如下查询:
select avg(sal) from t2;
得到:
avg()函数会忽略null值。如果想把null值考虑在内,应使用coalesce()函数:
select avg(coalesce(sal, 0)) from t2;
coalesce()函数会返回其参数列表中第一个非null的值,如果sal为null,则返回0;
计算行数
应注意,当把列名称作为参数的时候,count函数会忽略null值,而使用符号*或者常量参数的时候,就会包含null。考虑如下结果集:
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值的个数。
累计求和
计算全体员工工资的累计额。
Oracle
select ename, sal,
sum(sal) over (order by sal, empno) as running_total
from emp
order by sal;
MySQL
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经典实例》第七章
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。