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

  • Votes
  • Date
  • Date décroissante
  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+
    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'