0
votes

Moyenne de plusieurs colonnes dans SQL lorsque certaines données ne sont pas là

J'ai une table SQL qui compte 8 colonnes qui sont des résultats empiriques pour le même processus. Cependant, certaines des données sont incomplètes signifient que certaines des 8 colonnes ont une valeur nulle au lieu d'une valeur numérique. Je sais que si les 8 colonnes étaient présentes, je pouvais faire quelque chose comme ... xxx pré>

mais si deux des valeurs sont nulelles ce que je veux dans ce cas est ... P >

SELECT (val1+val2+val3+val4+val5+val6)/6 from mytable;

sql

4 commentaires

Tagez votre question avec la base de données que vous utilisez.


Est-ce que cela répond à votre question? Strange MySQL AVG () Anomaly Null Values ​​


Pivot afin que vos données soient dans une seule colonne / plusieurs lignes et utilisez AVG. Comment faites-vous que c'est db à charge. Ce que vous avez est une mauvaise conception de table - cela vous fait avoir à faire ces choses ....


Est-ce que cela répond à votre question? SQL: Sum 3 colonnes Quand une colonne a une colonne valeur null?


3 Réponses :


0
votes

Vous serez probablement mieux en train de mettre les données dans des rangées séparées. Vous peut faire cela avec une certaine arithmétique: xxx

si votre base de données prend en charge les jointures latérales (telles que SQL Server, Oracle et Postgres), la syntaxe telle que ceci est Plus simple: xxx


0 commentaires

0
votes
 SELECT sum(COALESCE(val1,0)
          + COALESCE(val2,0)
          + COALESCE(val3,0)
          + COALESCE(val4,0)
          + COALESCE(val5,0)
          + COALESCE(val6,0)
          + COALESCE(val7,0)
          + COALESCE(val8,0)) / 8 AS total FROM yourTable

0 commentaires

0
votes

Une option de base de données croisée utilise coalesce () code> et case code> expressions. Cela suppose que toutes les valeurs ne seront pas code> null code> sur le même enregistrement.

select id, avg(val) res
from (
    select id, val1 val from mytable
    union all select id, val2 val from mytable
    union all select id, val3 val from mytable
    union all select id, val4 val from mytable
    union all select id, val5 val from mytable
    union all select id, val6 val from mytable
    union all select id, val7 val from mytable
    union all select id, val8 val from mytable
) t
group by id


0 commentaires