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 :

Enlever les doublons d'une somme


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Enlever les doublons d'une somme
    Bonjour,

    J'utilise Mysql version 5.0.22.

    Voici le schema de ma DB: 3 tables, dont une table d'association N-M.

    Table A
    id
    number
    totalprice

    Table A_B
    A_id
    B_id

    Table B
    id
    area

    Mon but est relativement simple, je voudrais calculer la somme des area pour un id de A donné.

    Voici ma requete (qui ne fonctionne evidemment pas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT
         sum( B.area )
    FROM
         A INNER JOIN A_B ON A.id = A_B.A_id
         INNER JOIN B ON A_B.B_id = B.id
    Alors je comprend pourquoi ca ne fonctionne pas, c'est a cause de la table d'association, qui me rend des doublons.

    Je ne peux pas utiliser SUM ( distinct B.area ), il ne m'additionne pas les area identiques.
    Ce que je cherche finalement à faire c'est un sum des resultats distincts de la requete...

    Alors j'ai bien une autre requete qui fonctionne, mais je n'aime pas le IN...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT sum( B1.area )
    FROM B B1
    WHERE B1.id
    IN (
    SELECT
         DICTINCT B.id
    FROM
         A INNER JOIN A_B ON A.id = A_B.A_id
         INNER JOIN B ON A_B.B_id = B.id
    )
    Y'a-t-il une autre facon de proceder ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    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 115
    Points : 28 480
    Points
    28 480
    Par défaut
    Tu peux déjà gagner une jointure, et ôter le DISTINCT qui n'a pas d'intérêt ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  SUM( B1.area )
    FROM    B B1
    WHERE   B1.id   IN
            (   SELECT  A_B.B_id
                FROM    A 
                    INNER JOIN 
                        A_B ON A.id = A_B.A_id
            )
    ;

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    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 115
    Points : 28 480
    Points
    28 480
    Par défaut
    Vérifie si EXISTS ne serait pas plus efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  SUM( B1.area )
    FROM    B B1
    WHERE   EXISTS
            (   SELECT  0
                FROM    A 
                    INNER JOIN 
                        A_B ON A.id = A_B.A_id
                WHERE    B1.id = A_B.B_id
            )
    ;

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Je ne sais pas si c'est plus efficace avec exist, mais en tout cas ça fonctionne correctement.

    Merci beaucoup pour l'aide

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

Discussions similaires

  1. [PHP 5.0] Enlever les doublons dans une variable
    Par raphy31 dans le forum Langage
    Réponses: 10
    Dernier message: 26/03/2014, 11h10
  2. Enlever les doublons d'une requête
    Par Yoseik dans le forum Langage SQL
    Réponses: 12
    Dernier message: 05/09/2008, 16h45
  3. Enlever les doublons dans une liste
    Par gefrey54 dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 14/09/2007, 18h46
  4. une fonction pour enlever les doublons d'un array
    Par secteur_52 dans le forum Delphi
    Réponses: 1
    Dernier message: 27/06/2006, 14h45
  5. [SQL] Enlever les doublons par rapport a une colonne
    Par irenee dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/12/2005, 20h23

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