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
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
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
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
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!