Besoin d'aide SVP moyenne sql

vincent -  
 vincent -
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

  1. vincent
     
    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 :-)
    0
  2. Pingu
     
    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
    0
    1. vincent
       
      Merci pour ta réponse,je vais essayer de tester ça avec mon exemple et je le mettrais en ligne s'il marche
      0
    2. vincent
       
      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;
      0