Maison > base de données > tutoriel mysql > Comment calculer correctement la moyenne de plusieurs colonnes avec des valeurs NULL dans SQL Server ?

Comment calculer correctement la moyenne de plusieurs colonnes avec des valeurs NULL dans SQL Server ?

DDD
Libérer: 2024-12-27 04:08:10
original
827 Les gens l'ont consulté

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

Moyenne de plusieurs colonnes

Lors du calcul de la moyenne de plusieurs colonnes dans un tableau, il est crucial de gérer correctement la nullité. Considérons la situation suivante :

Problème :

Vous disposez d'une table appelée "Demande" avec les données suivantes :

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
Copier après la connexion

Vous souhaitez afficher la moyenne des colonnes R1, R2, R3, R4 et R5. Cependant, lorsque vous utilisez la requête suivante :

Select Req_ID, Avg(R1+R2+R3+R4+R5) as Average
from Request
Group by Req_ID
Copier après la connexion

Vous obtenez la somme des valeurs au lieu de la moyenne.

Solution :

Le problème réside dans la gestion des valeurs NULL. Si vos colonnes autorisent les valeurs NULL, la somme des valeurs NULL est également NULL. Pour calculer correctement la moyenne, vous devez ignorer les valeurs NULL.

Syntaxe post-2008 :

Si vous utilisez SQL Server 2008 ou une version ultérieure, vous pouvez utiliser la syntaxe suivante :

SELECT *,
       (SELECT AVG(c)
        FROM   (VALUES(R1),
                      (R2),
                      (R3),
                      (R4),
                      (R5)) T (c)) AS [Average]
FROM   Request
Copier après la connexion

Cette syntaxe utilise la clause VALUES pour construire un tableau avec une ligne pour chaque colonne. L'agrégat AVG est ensuite appliqué à cette table, en ignorant toutes les lignes contenant des valeurs NULL.

Syntaxe antérieure à 2008 :

Si vous utilisez SQL Server 2005 ou plus tôt, vous pouvez utiliser la syntaxe suivante :

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
Copier après la connexion

Cette syntaxe utilise UNION ALL pour créer un tableau avec une ligne pour chaque colonne. L'agrégat AVG est ensuite appliqué à cette table, en ignorant toutes les lignes contenant des valeurs NULL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal