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 :

Pb SQL : regroupement + min


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Points : 66
    Points
    66
    Par défaut Pb SQL : regroupement + min
    Bonjour,

    J'ai une requête qui me sort une liste de valeurs dont
    j'aimerais ne retenir qu'une seule partie :

    TABLE T1
    ID ID2 DATE QTE
    91558 1031 20110921 195
    91559 1031 20110922 195
    91560 1031 20110923 195
    91561 1031 20110919 195
    91562 1031 20110920 195
    91563 1031 20110921 195
    91564 1031 20110922 195
    91565 1031 20110923 195
    91566 1031 20110919 197
    91567 1031 20110920 197

    Dans ce cas là
    91558 1031 20110921 195
    91566 1031 20110919 197

    (Où je ne garde que le ID mininum).
    Le but étant à la fin de faire un SUM(QTE)

    J'ai essayé de faire ça en 2 fois dans la même requête
    mais je ne sais pas faire un WHERE IN avec 2 critères :

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT SUM(QTE)
    FROM TABLE1
    WHERE Champ1, Champ2
    IN SELECT DISTINCT Champ1, Champ2
    FROM TABLE1
    WHERE ChampX = Critere1
    AND     ChampY = Critere2
    Ici, la requête du dessous me sort la liste exacte des
    valeurs qui m'intéresse (je fais disparaitre ID) mais mon
    soucis est de dire que je veux matcher sur 2 champs le
    IN.

    J'utilise SQL Server.

    Merci d'avance,

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Apparemment, tu as besoin d'apprendre les jointures !

    (Où je ne garde que le ID mininum).
    Minimum par rapport à quoi ?
    Pour chaque QTE ?

    Dans ce cas, MIN et GROUP BY te seront utiles.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Apparemment, tu as besoin d'apprendre les jointures !


    Minimum par rapport à quoi ?
    Pour chaque QTE ?

    Dans ce cas, MIN et GROUP BY te seront utiles.
    Bonjour,

    En fait, j'ai résolu ça par programmation, je ne garde l'ID que si 1 critère
    parmi DATE, ID2 et QTE change. Je connais un minimum les jointures mais
    je m'orientais plus vers des IN ou des MATCH ou des HAVING pour tout faire en une seule grosse requête.

    Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Tu peux écrire la requête que tu présentes comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  SUM(qte)
    FROM    table1
    WHERE   (   champ1
            ,   champ2
            )
        IN  (   SELECT DISTINCT 
                        champ1
                    ,   champ2
                FROM    table1
                WHERE   champx = critere1
                    AND champy = critere2
            )
    ;
    Ou comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  SUM(qte)
    FROM    table1  tb1
    WHERE   EXISTS
            (   SELECT  0
                FROM    table1  tb2
                WHERE   tb2.champx = critere1
                    AND tb2.champy = critere2
                    and tb2.champ1 = tb1.champ1
                    and tb2.champ2 = tb1.champ2
            )
    ;
    Pour passer de ta première liste à la seconde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  t1.id
        ,   t1.id2
        ,   t1.date
        ,   t1.qte
    FROM    t1  tb1
    WHERE   EXISTS
            (   SELECT  0
                FROM    t1  tb2
                WHERE   tb1.qte = tb2.qte
                HAVING  tb1.id  = MIN(tb2.id)
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. [SQL] regrouper les requêtes en 1 fichier include ?
    Par grinder59 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/01/2012, 13h00
  2. [SQL] Regroupement de donnée
    Par le_sonic dans le forum Access
    Réponses: 1
    Dernier message: 01/08/2006, 11h43
  3. SQL - Regroupement & Max(UneDate)
    Par ChrOnOs83 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/12/2005, 17h02
  4. Requête sql regroupement de dates
    Par rocs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/07/2005, 16h40
  5. SQL - Regrouper des enregistrements...
    Par Régent dans le forum Langage SQL
    Réponses: 6
    Dernier message: 06/02/2005, 23h42

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