Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Purata Berbilang Lajur dengan Nilai NULL dalam SQL Server dengan betul?
Purata Berbilang Lajur
Apabila mengira purata berbilang lajur dalam jadual, adalah penting untuk mengendalikan kebolehbatalan dengan betul. Pertimbangkan situasi berikut:
Masalah:
Anda mempunyai jadual yang dipanggil "Permintaan" dengan data berikut:
Req_ID R1 R2 R3 R4 R5 R12673 2 5 3 7 10 R34721 3 5 2 1 8 R27835 1 3 8 5 6
Anda mahu paparkan purata lajur R1, R2, R3, R4 dan R5. Walau bagaimanapun, apabila anda menggunakan pertanyaan berikut:
Select Req_ID, Avg(R1+R2+R3+R4+R5) as Average from Request Group by Req_ID
Anda mendapat jumlah nilai dan bukannya purata.
Penyelesaian:
Isunya terletak pada pengendalian nilai NULL. Jika lajur anda membenarkan NULL, jumlah NULL juga adalah NULL. Untuk mengira purata dengan betul, anda perlu mengabaikan NULL.
Sintaks Pasca-2008:
Jika anda menggunakan SQL Server 2008 atau lebih baru, anda boleh menggunakan sintaks berikut:
SELECT *, (SELECT AVG(c) FROM (VALUES(R1), (R2), (R3), (R4), (R5)) T (c)) AS [Average] FROM Request
Sintaks ini menggunakan klausa VALUES untuk membina jadual dengan satu baris untuk setiap lajur. Agregat AVG kemudiannya digunakan pada jadual ini, mengabaikan sebarang baris yang mengandungi nilai NULL.
Sintaks Pra-2008:
Jika anda menggunakan SQL Server 2005 atau sebelum ini, anda boleh menggunakan sintaks berikut:
SELECT *, (SELECT AVG(c) FROM (SELECT R1 UNION ALL SELECT R2 UNION ALL SELECT R3 UNION ALL SELECT R4 UNION ALL SELECT R5) T (c)) AS [Average] FROM Request
Sintaks ini menggunakan UNION ALL untuk mencipta jadual dengan satu baris bagi setiap lajur. Agregat AVG kemudiannya digunakan pada jadual ini, mengabaikan mana-mana baris yang mengandungi nilai NULL.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Purata Berbilang Lajur dengan Nilai NULL dalam SQL Server dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!