IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[Oracle 9] Requete selection top 5


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Par défaut [Oracle 9] Requete selection top 5
    Bonjour,
    dans le cadre d'un projet de fin d'année où l'on nous demande de faire 20 requétes, je coince sur une condition de selection d'une requéte (ne connaissant pas de fonctions appropriées)
    Donc on me demande d'afficher le top 5 des trains, affiché sous la forme Paris - Brest en fonction des billets les plus réservés!!
    Donc en ce qui concerne d'afficher les trains et de voir les plus réservés par rapport au nombre de sortie de leur réservation_id, là je n'ai pas de probléme!! Voici ma requéte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select rownum, r.reservation_id AS "ID", gd.nom|| ' - ' || ga.nom AS "Train"
    from t_reservations r, t_billets b, t_wagons_trains x, t_trains t, t_gares gd, t_gares ga
    where r.reservation_id = b.reservation_id
    and b.wag_tr_id = x.wag_tr_id
    and t.train_id = x.train_id
    and t.depart_id = gd.gare_id
    and t.arrivee_id = ga.gare_id
    order by r.reservation_id
    /
    Merci à tous pour l'aide ou conseil que vous pourrez m'apporter!

  2. #2
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    Salut,

    Quelle SGBDR ?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Par défaut
    Euh oui, je débute, c'est quoi une SGBDR ?
    lol
    Sinon je bosse sur oracle 9i et sur un serveur 10g
    Voilà!!!

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Les autres me corrigeront si je me trompe mais ça doit ressembler à quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ...
    FROM (ta requete)
    WHERE ROWNUM < 6

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Par défaut
    Ben en fait je voudrais additionner les reservation_id qui sortent plusieurs fois, c'est à dire tous, les classer par ordre croissant et ainsi selectionner les 5 premières lignes à l'aide de ROWNUM.... ce qui me donnera le TOP 5
    J'ai la théorie en tête mais pas la pratique, ça me rend fou

  6. #6
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    Citation Envoyé par Le Mad
    je voudrais additionner les reservation_id
    tu veux additionner les reservations_id, compter le nombre de réservations, le nombre de billet par réservation ou le nombre total de billets vendus pour l'ensemble des résa sur un train/ligne donnée ?

    C'est pt moi, mais entre ton explication et ta requete, il y a un truc qui m'échappe.

  7. #7
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    Si j'ai bien compris
    Prédicat :
    - Un Enregistrement de la table des reservations = Une Resa dans un train
    - au vue de votre requete de depart , il sagit de trouver quels sont les trajets (Ville depart - ville d'arrivee) les plus utilisés ?

    Donc la requete suivante doit vous donner les trajets (des plus utilisés au moins utilisés)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select count(*) AS nb_resa , gd.nom|| ' - ' || ga.nom AS "Train" 
    from t_reservations r, t_billets b, t_wagons_trains x, t_trains t, t_gares gd, t_gares ga 
    where r.reservation_id = b.reservation_id 
    and b.wag_tr_id = x.wag_tr_id 
    and t.train_id = x.train_id 
    and t.depart_id = gd.gare_id 
    and t.arrivee_id = ga.gare_id 
    group by gd.nom|| ' - ' || ga.nom 
    otrder by count(*) desc
    /
    Et pour en extraire le top 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Select * From  (select count(*) AS nb_resa , gd.nom|| ' - ' || ga.nom AS "Train" 
                           from t_reservations r, t_billets b, t_wagons_trains x, t_trains t, t_gares gd, t_gares ga 
                           where r.reservation_id = b.reservation_id 
                           and b.wag_tr_id = x.wag_tr_id 
                           and t.train_id = x.train_id 
                           and t.depart_id = gd.gare_id 
                           and t.arrivee_id = ga.gare_id 
                           group by gd.nom|| ' - ' || ga.nom 
                           order by count(*) desc
                           )  T2
    Where T2.rownum < 6

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Par défaut
    Nickel ça roule!!!!! merci beaucoup Argoet, juste un truc qui cloche, c'est la colonne que tu as nommé T2 qui n'est pas reconnu, donc inutile, en tt cas bon boulot!!!!! Merci mille fois
    Juste une petite question, que fait exactement count(*), il compte tt les enreg
    d'une même table?

  9. #9
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Attention, RowNum n'est pas exploitable avec un GROUP BY, l'attribution des numéros se faisant AVANT le tri ... d'ou l'utilité de passer par une sous-requête.

    Le Count(*) compte toutes les lignes d'un table. Associés à d'autres champs, il permet de faire un décompte par valeurs distinctes de ce champ ou ensemble de champs, et on retrouver forcément ces champs dans le Group By.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  10. #10
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    n'oubliez pas ==>

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Pourquoi j'ai la sensation que mon post a été totalement TRANSPARENT sur ce coup là ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 22
    Par défaut
    Pourquoi j'ai la sensation que mon post a été totalement TRANSPARENT sur ce coup là ?
    Non ton post a été lu, mais je ne connaissais pas encore le principe du count(*)... Voilà tt, alors que c'est ta méthode qui a été utilisé ds sa forme la plus générale...
    Merci à tous!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Select Top N dans une requete
    Par marcGR dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 21/01/2013, 18h46
  2. Réponses: 2
    Dernier message: 08/02/2012, 15h49
  3. requete select + oracle
    Par quentincabo dans le forum SQL
    Réponses: 2
    Dernier message: 11/04/2008, 13h34
  4. Réponses: 6
    Dernier message: 09/11/2006, 14h19
  5. [MySQL] Pb requete SELECT top mssql
    Par crevettepourrie dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/01/2006, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo