Nous sommes actuellement le 15 Juil 2026, 22:06

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 3 message(s) ] 
Auteur Message
MessagePublié: 14 Déc 2004, 14:39 
Hors-ligne
Petit nouveau
Petit nouveau

Inscription : 07 Nov 2003, 23:37
Message(s) : 26
Bonjour,

J'ai une requête SQL Oracle d'une certaine complexité à écrire.

Je travaille avec une table d'étudiants où un même étudiant peut revenir plusieurs fois. Il est identifié par un code permanent. Exemple simplifié:

Code perm Nom Note Cours
LAPJ0001 Laplante 85 Math
LAPJ0001 Laplante 85 Français
PERC0002 Perreault 71 Math
etc

Je dois faire une requête qui sélectionne tous les codes permanents (lignes entières), en éliminant les doubles. La priorité est la ligne où la note est la plus élevée. Si, sur deux lignes d'un même code, on retrouve la même note comme dans mon exemple ci-haut, la première des deux lignes doit être conservée selon le tri actuel de la table.

Si vous avez une idée, elle serait bienvenue. J'ai tenté de faire des first mais il ne semble pas facile de faire sortir un résultat en incluant toutes les informations comme nom et cours.

Merci


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 14 Déc 2004, 14:46 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

Inscription : 17 Fév 2002, 09:35
Message(s) : 588
Avec un Group by? Exemple (si je ne m'abuse) :

Code :
SELECT max(Note)
FROM etudiant
GROUP BY Code_perm


Pour ce qui est de récupérer les autre colonne je ne sais pas trop mais sa peut te donner une piste au moins...

_________________
jack_mount@yahoo.fr


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 25 Jan 2005, 17:14 
Hors-ligne
Petit nouveau
Petit nouveau

Inscription : 07 Nov 2003, 23:37
Message(s) : 26
Salut jack!!! :!:

Effectivement, j'ai eu besoin d'un group by car je devais faire le compte des élèves... mais j'ai longtemps essayé de le faire à l'intérieur de cette requête sans trop de succès. La solution est dans la fonction rank() qui permet de donner un rang unique par code permanent. Rownum est du oracle pour no. de ligne.

select
code_perm,
nom,
note,
cours
from (

select
code_perm,
nom,
note,
cours
rank() over (partition by code_perm order by note desc, rownum asc) as rang

from Table) tbl

where rang=1;


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 3 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
cron
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site