前面我們在介紹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)
———-
550
Select avg(NVL(comm,0)) from emp; 得到
AVG(NVL(COMM,0))
—————-
157.142857
這樣就驗證了剛才的說法。