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 :

Requête group by [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut Requête group by
    Bonjour,
    j'ai par exemple

    Client surface ordre (unique)
    cli1 20 4000
    cli1 25 4002
    cli1 30 4003
    cli2 10 4005
    cli2 5 3000
    Je dois supprimer ceux qui ont la surface la plus petite
    Je dois obtenir :
    cli1 30 4002
    cli2 10 4005

    J'ai fait via access un regroupement (group by) sur client et choisi max pour surface . Je voudrais les exclure ensuite !
    mais j'obtiens :
    cli1 30
    cli2 10

    mais je n'ai pas ordre !
    Avec regroupent pour ordre j'obtiens toutes les lignes !

    MErci
    Je cois qu'il y a plus simple !

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Falco-,

    C'est une question fréquente : tout n'est pas toujours possible en une seule fois !

    Citation Envoyé par Falco-
    J'ai fait via access un regroupement (group by) sur client et choisi max pour surface . Je voudrais les exclure ensuite !
    mais j'obtiens :
    cli1 30
    cli2 10
    ==> Bravo, dans un premier temps. Appelons cette requête R1.

    Il faut créer une requête R2 qui analyse R1 liée à ta table d'origine via Client et Surface ==> tu obtiendras Ordre qui correspond au Max() calculé par R1.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    re,
    dans la première requête j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT client.client, Max(client.surface) AS MaxDesurface
    FROM client
    GROUP BY client.client;
    et la deuxième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT cli1.MaxDesurface, client.ordre
    FROM cli1 INNER JOIN client ON cli1.client = client.client;
    j'obtiens :
    MaxDesurface ordre
    30 4000
    30 4002
    30 4003
    10 4005
    10 3000
    MErci car je sèche ...

    Je devris obtenir 4003 et 4005 !

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Tu n"as pas appliqué la méthode proposée.

    Passes par l'assistant et nommes R1 cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT client.client, Max(client.surface) AS MaxDesurface
    FROM client
    GROUP BY client.client;
    Ensuite, par l"assistant :
    Citation Envoyé par Richard_35
    Il faut créer une requête R2 qui analyse R1 liée à ta table d'origine via Client et Surface ==> tu obtiendras Ordre qui correspond au Max() calculé par R1.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    Bonjour,
    désolé vous avez raison !
    Avec un champ surface normal c'est ok

    Mais !
    j'ai également la requête R1 qui est de ce type :
    Champ calculé sur la surface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT client.client, Max([surface]/2) AS Expr1
    FROM client
    GROUP BY client.client;
    là je ne vois pas comment faire ?

    Merci

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Falco-,

    Citation Envoyé par Falco-
    là je ne vois pas comment faire ?
    ==> eh bien, il faut :
    - créer une requête R3 qui analyse ta table de base avec [surface]/2 AS Moitié_Surface ;
    - créer une requête R4 qui analyse R3 groupée, pour trouver Max(Moitié_Surface) ;
    - appliquer la même méthode que précédemment pour obtenir des précisions sur les MAX() trouvés.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    Bonjour,
    oui en effet c'est parfait
    Merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/09/2006, 12h35
  2. [Req] Explication sur requête Group By
    Par benazerty dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 01/09/2006, 17h52
  3. Réponses: 3
    Dernier message: 16/08/2006, 16h05
  4. traiter les groupes retourné par la requête GROUP BY
    Par mgemc2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/08/2006, 13h16
  5. Aide sur une requête (Group By...??)
    Par Cocolapin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2004, 10h26

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