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

计算平均值

需要注意null值的问题。
例如考虑如下表:

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

clipboard.png

如果采用如下查询:

select avg(sal) from t2;

得到:

clipboard.png

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;

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值的个数。

累计求和

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

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

clipboard.png

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;

clipboard.png

《SQL经典实例》第七章
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值