Besoin d'aide SVP moyenne sql

Fermé
vincent - 27 oct. 2009 à 17:12
 vincent - 27 oct. 2009 à 21:14
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
A voir également:

2 réponses

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