Problème dans une requette sql

Bonjour,

j'ai des données comme suit:
chaque personne a une note sur 100
et la troisième colonne désigne si cette personne est évalué ou pas encore

nom | note | de
PERS1 | 0 | 0
PERS2 | 30 | 1
PERS3 | 10 | 1
PERS4 | 30 | 1
PERS5 | 44 | 1

je voudrais avoir une requête qui pourrais me faire la moyenne des notes mais sans calculer ceux qui n'ont pas été évalué grâce a la colonne de dans la table

dans ce cas la requête doit calculer 114/4 donc le résultat c'est 28.5

j'ai déjà tenter une requête mais celle la calcule 114/5 et le résultat obtenu c 22.8 ce qui est faux

voici ma requête:
select ROUND(avg(note)) from tab_note where de<>0

Merci

2 réponses

  1. Bonjour,

    Votre champ de doit être un varchar non ?
    Car sinon ça marche, le résultat est bien 29

    Si de est un varchar la requête donc
    select ROUND(avg(note)) from tab_note where de<>'0'
    1. Bonjour,

      2ème champ doit être valeur ou NULL

      Donc, une personne pas évaluée, note contient NULL (pa sle texte, mais l'attribut NULL qui est sélectionnable comme caractéristique du contenu par défaut à la création de l'enregitrement).

      Ainsi, pour sortir les notes:

      SELECT note FROM tab_note WHERE note IS NOT Null

      vous stockez dans un tableau $tabNotes par exemple et vous traitez le tableau:
      - nombre de valeurs:

      $nbvaleurs = count($tabNotes);

      une ch'tite fonction qui fait la somme des valeurs, puis pour la moyenne, c'est facile ensuite...

      Avantage de ma solution: 2 champs au lieu de trois. Car personne pas évaluée, son champ note est NULL, personne évaluée, champ contient une valeur.

      A+