Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Purata Berbilang Lajur dengan Nilai NULL dalam SQL Server dengan betul?

Bagaimana untuk Mengira Purata Berbilang Lajur dengan Nilai NULL dalam SQL Server dengan betul?

DDD
DDDasal
2024-12-27 04:08:10838semak imbas

How to Correctly Calculate the Average of Multiple Columns with NULL Values in SQL Server?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn