请问,如果该条数据的本列值为空的话
使用avg函数,会把这条数据也算进来吗?

解决方案 »

  1.   

    前面我们在介绍oracle的聚合函数时提到如果在给定的值中存在空值的话,oracle将会忽略掉这些空值。这个处理的方式在大多数时候是符合我们要求的,但是在有些时候可能会有问题。例如,现在到了年关,公司会对部分员工进行奖励,而当然会有一部分人没有得到奖励。比如现在有一张表中存的是员工的奖金额,那个将会有一部分人对应的奖金额是空值,因为他们根本就没有得到奖励,现在老板让你统计全公司的得奖平均额。如果你直接使用Select avg(bonus) from emp;得到的结果将会是那些得到奖励的人中的平均奖励额。而老板要求的是统计出全公司所有员工的奖励平均额。这是你应该使用NVL函数来把那些没有拿到奖励的员工也强行加入进来。例如:Select avg(NVL(bonus,0)) from emp;在我们的scott的schema里有一个表是emp,虽然里面没有奖金,但有另外一个column comm.,我们可以驾驶comm来表示奖金来测试一下Select avg(comm) from emp; 得到AVG(COMM)———-550Select avg(NVL(comm,0)) from emp; 得到AVG(NVL(COMM,0))—————-157.142857这样就验证了刚才的说法。
      

  2.   

    组函数是忽略null的可以测一下
    select count(1) from tab_nameselect count(tab_col) from tab_name如果 tabl_col有为空的  返回结果是不一样的
      

  3.   

    所有的组函数都是对非空列的值的处理。
    count(*)这个除外。
      

  4.   

    SQL> create table t1(id number,name varchar2(20));Table created.SQL> insert into t1 values(1,'wj');1 row created.SQL> insert into t1 values(2,'wh');1 row created.SQL> insert into t1(id) values(2);1 row created.SQL> commit;Commit complete.SQL> select * from t1;        ID NAME
    ---------- --------------------
             1 wj
             2 wh
             2SQL> select count(name) from t1;COUNT(NAME)
    -----------
              2SQL>
    count()也一样不记空值的
      

  5.   

    是会忽略掉null值的,实践下就ok了,实践出真知嘛
      

  6.   


    试了一下,count(*)是记null的
    conut(NAME)是不记null的
    9楼说的对,呵呵
      

  7.   

    不会的 要使用nvl函数 
      

  8.   

    不会,使用函数nvl()函数了。