天天看點

在oracle的聚合函數(sum、avg等)中使用NVL函數,強迫加入空值

前面我們在介紹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

這樣就驗證了剛才的說法。