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...)
?
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