Besoin d'aide SVP moyenne sql

Bonjour à tous,

J'ai un petit problème,en fait j'ai une table eleves qui contient les champs:nom,age,pratique(pratique d'un instrument de musique).Quand un elève pratique plusieurs instruments,cela apparait sur plusieurs lignes.
Je souhaite pouvoir afficher avec une requete sql la moyenne d'age des élèves mais sans compter les doublons.
Par exemple,si j'ai la table Eleves déclarée comme ça:
nom age pratique
albert 35 piano
albert 35 contrebasse
paul 18 cor
...

je dois prendre l'age 35 une seule fois dans mon calcul de ma moyenne.
La requete select(avg)from Eleves donne donc un résultat faux.
Pouvez vous m'aidez s'il vous plait?

Je vous remercie d'avance pour votre aide
Configuration: Windows XP Internet Explorer 6.0

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Ca y est j'ai réussi à trouver d'où venait le problème.
    Par contre,est ce quelqu'un pourrait m'expliquer comment on fait des if then else dans une requete sql
    je lis des cours sur le net mais je ne comprend pas trop.

    Merci d'avance :-)
    1. Salut,
      Je pense qu'il aurait été sympa pour les futurs lecteurs interpellés par ton titre de donner la solution à ton problème

      Pour ce qui est du if then else, je crois que ça se résout par du
      CASE expr {WHEN expr THEN expr} ELSE expr END
      ou du
      CASE {WHEN prédicat THEN expr} ELSE expr END
      mais je suis pas sûr que ce soit standard. Sous oracle, j'utilisais decode() mais peut-être CASE y est implémenté... je te laisse le tester

      exemples :
      select CASE gender
        WHEN 'MALE' THEN 'Mr'
        WHEN 'FEMALE' THEN 'Mrs'
        ELSE '*****'
        END || ' ' ||Firstame||', '||Initial||' '||LastName
      from ustomers
      where CUSTID = xxx
      
      select CASE
        WHEN AGE < 3 THEN 'Bébé'
        WHEN AGE < 13 THEN 'Enfant'
        WHEN AGE < 22 THEN 'Adolescent'
        WHEN AGE < 31 THEN 'Adulte'
        ELSE 'Vieillard'
        END tranche, count(1)
      from population
      group by CASE
        WHEN AGE < 3 THEN 'Bébé'
        WHEN AGE < 13 THEN 'Enfant'
        WHEN AGE < 22 THEN 'Adolescent'
        WHEN AGE < 31 THEN 'Adulte'
        ELSE 'Vieillard'
        END
      1. Merci pour ta réponse,je vais essayer de tester ça avec mon exemple et je le mettrais en ligne s'il marche
      2. Tu as raison,j'aurais du mettre le code,mais j'étais tellement content que j'ai oublié.
        (j'ai testé ça marche)

        select avg(age)from (select age from Eleves group by nom)tab;