web-dev-qa-db-fra.com

Obtention de la moyenne de trois colonnes par ligne en SQL

La fonction AVG() dans SQL fonctionne avec des données de colonne particulières. Mais ici, nous voulons calculer la moyenne de trois de ces colonnes pour chaque ligne. En mathématiques, on ferait

AVG=(col1 + col2 + col3)/3

De même: existe-t-il une requête pour calculer AVG(col1, col2, col3...)?

7
smo

Si les colonnes ne peuvent pas être annulées, utilisez simplement

(col1 + col2 + col3)/3

fonctionnera bien (bien que sur certains SGBDR, vous devrez peut-être avoir un numérateur ou un diviseur non entier pour éviter la division entière).

Pour les colonnes nullables, vous pouvez utiliser quelque chose comme

SELECT CASE
         WHEN COALESCE(col1, col2, col3) IS NOT NULL THEN 
         ( COALESCE(col1, 0) + COALESCE(col2, 0) + COALESCE(col3, 0) ) / 
            (CASE WHEN col1 IS NULL THEN 0 ELSE 1 END + 
             CASE WHEN col2 IS NULL THEN 0 ELSE 1 END + 
             CASE WHEN col3 IS NULL THEN 0 ELSE 1 END)
       END

Sur SQL Server, vous pouvez également utiliser

SELECT *,
       (SELECT AVG(Col)
        FROM   (VALUES(Col1),
                      (Col2),
                      (Col3)) V(Col)) AS col_average
FROM   YourTable
9
Martin Smith