我的表里有一个字段存放资料,设置的是不能为空,
但是有时资料会缺值,就用999999,六个9代表缺的资料了。
这样的话,还能用AVG函数计算这个字段的平均吗?怎么才能不把999999算进去?
会不会我开始设计的不对,应该设为可以为空,如果可以为空的话,AVG函数就会跳过空值吧?(另外,怎么看自己剩余的分数啊,晕,没找到)谢谢!

解决方案 »

  1.   

    你可以这样来算
    avg(字段,'999999,null,字段值)
    假设
    字段 a
    999999
    1
    2
    3
    4
    5
    用avg(decode(a,'999999',null,a))
    出来就是平均1-5的
      

  2.   

    select avg(v) from(
    select 1 as v from  dual
    union select 2 from dual);
    --返回1.5
    select avg(v) from(
    select null as v from  dual
    union select 2 from dual);
    --返回2
    select avg(decode(v,99999,null,v)) from(
    select 99999 as v from  dual
    union select 2 from dual);
    --返回2
      

  3.   

    测试语句
    select avg(decode(a,999999,null,a)) 
    from (
    select 999999  a from dual
    union all
    select 1 from dual
    union all
    select 2 from dual
    union all
    select 3 from dual
    union all
    select 4 from dual
    union all
    select 5 from dual)结果
    3
    如果你字段是varchar2格式,就用avg(decode(a,'999999',null,a)) 
    如果是number 就用
    avg(decode(a,999999,null,a)) 
      

  4.   

    avg(decode(a,'999999',null,a)) 
    怎么前面一个a,后面又是一个a呢?是什么意思呀
      

  5.   

    decode(a,b,c,d)
    如果a=b则返回c否则返回d
      

  6.   

    avg(decode(a,'999999',null,a))  
    decode 判断条件 a字段
    如果a字段=999999,输出 null
    否则输出 a字段的内容
    假设表的数据为
    999999
    1
    2
    3
    4
    5
    用select decode(a,999999,null,a)) from table
    的结果就是
    a
         (值为null)
    1
    2
    3
    4
    5  
    再avg一下,出为就是3