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

Requêtes et SQL. Discussion :

Besoin de votre aide pour une requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 17
    Points : 12
    Points
    12
    Par défaut Besoin de votre aide pour une requête
    Bonjour,

    Je suis débutant sur Access et j'ai besoin d'aide pour réaliser une requête particulière, à savoir :

    j'ai une table par exemple "Voyages"

    dans cette table 3 champs

    "VILLES" - "HOTEL" "NOMBRE DE VISITES"

    (avec beaucoup de données dans chaque champ)

    Si je veux à travers une requête n'afficher que les 3 "HOTELS" par "VILLE" recevant le plus grand "NOMBRE DE VISITES"

    Comment dois-je procéder ?

    Merci de votre aide

    Bonne journée

    BL

  2. #2
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    Hello
    je ne suis pas arrivé en une seule requête
    par contre, TOP 3 dans la requête sur une seule ville te donne bien les trois hotels les plus fréquentés

    en huit requêtes, ça donne:
    1° pour avoir les sommes par ville et par hotel: Req1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT Ville, Hotel, Sum(nbvisit) AS Som_NbVisit FROM Voyages GROUP BY Ville, Hotel;
    2° pour avoir une liste avec une seule fois chaque Ville: Req2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Ville FROM Voyages GROUP BY Ville;
    3° pour avoir la plus grande fréquentation de chaque Ville: Req3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Req2.Ville, Max(Som_NbVisit) AS NbVisit_Hotel1 FROM Req2 INNER JOIN Req1 ON Req2.Ville = Req1.Ville GROUP BY Req2.Ville;
    4° pour avoir la deuxième fréquentation inférieure à la première et pour chaque Ville : Req4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT Req3.Ville, Req3.NbVisit_Hotel1, Req1. Som_NbVisit
    FROM Req3 INNER JOIN Req1 ON Req3.Ville = Req1.Ville
    WHERE [Req1].[ Som_NbVisit]<[Req3].[ NbVisit_Hotel1];
    5° pour ne garder que la plus grande des deuxièmes fréquentations : Req5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     SELECT Req4.Ville, Req4. NbVisit_Hotel1, Max(Som_NbVisit) AS NbVisit_Hotel2 FROM Req4
    GROUP BY Req4.Ville, Req4. NbVisit_Hotel1;
    6° pour avoir la troisième fréquentation inférieure à la deuxième et pour chaque Ville : Req6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT Req5.Ville, Req5. NbVisit_Hotel1, Req5. NbVisit_Hotel2, Req1. Som_NbVisit
    FROM Req5 INNER JOIN Req1 ON Req5.Ville = Req1.Ville
    WHERE [Req1]. Som_NbVisit]<[Req5].[ NbVisit_Hotel2];
    7° pour ne garder que la plus grande des troisièmes fréquentations : Req7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT Req6.Ville, Req6. NbVisit_Hotel1, Req6. NbVisit_Hotel2, Max(Req6. Som_NbVisit) AS NbVisit_Hotel3
    FROM Req6
    GROUP BY Req6.Ville, Req6. NbVisit_Hotel1, Req6. NbVisit_Hotel2;
    8° et enfin pour attribuer l’hôtel à chacun de ces nombres de visites :Req8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     SELECT Req7.Ville, Req7. NbVisit_Hotel1, Req1.Hotel AS Hotel1, Req7. NbVisit_Hotel2, Req1_1.Hotel AS Hotel2, Req7. NbVisit_Hotel3, Req1_2.Hotel AS Hotel3 
    FROM ((Req7 INNER JOIN Req1 ON (Req7. NbVisit_Hotel1 = Req1. Som_NbVisit) AND (Req7.Ville = Req1.Ville)) INNER JOIN Req1 AS Req1_1 ON (Req7. NbVisit_Hotel2 = Req1_1. Som_NbVisit) AND (Req7.Ville = Req1_1.Ville)) INNER JOIN Req1 AS Req1_2 ON (Req7. NbVisit_Hotel3 = Req1_2. Som_NbVisit) AND (Req7.Ville = Req1_2.Ville);
    Comme j'ai fait ça avec des désignations de boulons à la place des vis, des diamètres à la place des hotels et que j'ai transposé le SQL ensuite, il est possible que j'ai laissé trainer des bourdes

    En espérant avoir aidé

    PS que les pros du SQL améliorent ça et j'en serai ravi

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 768
    Points : 58 098
    Points
    58 098
    Billets dans le blog
    42
    Par défaut
    bonsoir,

    si j'ai bien compris, on devrait s'en sortir avec un IN et un SELECT TOP 3:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT V.Hotel, V.Ville, V.NbrVisites FROM Voyage V
    WHERE V.NbrVisites IN
    (
       SELECT TOP 3 U.NbrVisites FROM Voyage U
       WHERE U.Ville=V.Ville
       ORDER BY U.NbrVisites DESC
    )
    ORDER BY V.Ville, V.NbrVisites

  4. #4
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    Merci f-leb
    j'avais déjà utilisé IN
    mais je ne pensais pas qu'on puisse s'en servir comme d'une fonction.

    Petit bémol:
    dans mon test, j'ai voulu la baser sur une requête de regroupement sur 250 000 lignes (la Req1)
    et là, j'ai cru que mon PC était mort (plus de 5mn avec core i3)
    par contre en modfiant ma requête de regroupement en création de table (400 lignes) alors l'exécution est immédiate

    Encore merci

Discussions similaires

  1. besoin de votre aide pour une date
    Par elfia dans le forum C#
    Réponses: 4
    Dernier message: 13/12/2007, 10h12
  2. Besoin de votre aide pour une formulae
    Par bluecurve dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 01/05/2007, 08h46
  3. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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