Lebih
Dapatkan AVG dengan mengabaikan nilai Null atau Zero
Bagaimana saya bisa mendapatkan AVG
dari kolom yang mengabaikan NULL
dan nilai nol?
Saya memiliki tiga kolom untuk mendapatkan rata-ratanya, saya mencoba menggunakan skrip berikut:
SELECT distinct
AVG(cast(ISNULL(a.SecurityW,0) as bigint)) as Average1
,AVG(cast(ISNULL(a.TransferW,0) as bigint)) as Average2
,AVG(cast(ISNULL(a.StaffW,0) as bigint)) as Average3
FROM Table1 a, Table2 b
WHERE a.SecurityW <> 0 AND a.SecurityW IS NOT NULL
AND a.TransferW<> 0 AND a.TransferWIS NOT NULL
AND a.StaffW<> 0 AND a.StaffWIS NOT NULL
AND MONTH(a.ActualTime) = 4
AND YEAR(a.ActualTime) = 2013
Saya tidak mendapatkan hasil apa pun, namun ketiga kolom tersebut memiliki nilai termasuk NULL dan nol!
Apakah ada cara untuk mengecualikan nilai nol sebelum mendapatkan rata-rata?
contoh: AVERAGE(NOTNULL(SecurityW))
36
3
NULL
sudah diabaikan, jadi Anda bisa menggunakanNULLIF
untuk mengubah0
menjadiNULL
. Anda juga tidak memerlukanDISTINCT
danWHERE
Anda padaActualTime
tidak dapat di-sargable.PS Saya tidak tahu untuk apa
Table2 b
dalam kueri asli karena tidak ada kondisi gabungan untuk itu sehingga telah menghilangkannya dari jawaban saya.ini seharusnya bekerja, belum pernah mencoba. ini akan mengecualikan nol. NULL dikecualikan secara default
Anda sudah mencoba menyaring nilai
NULL
denganNOT NULL
. Saya telah mengubahnya menjadiIS NOT NULL
di klausaWHERE
sehingga akan dieksekusi. Kita bisa melakukan refaktorisasi dengan menghapus fungsiISNULL
di metodeAVG
. Juga, saya ragu Anda benar-benar membutuhkanbigint
sehingga kita bisa menghapus cast.