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 :

SUM dans un group_concat


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut SUM dans un group_concat
    Bonjour à tous et à toute.

    Voici mes tables:
    commande:
    _ id
    _ date

    jouets_commandes:
    _ id
    _ jouet_id
    _ commande_id
    _ quantite

    jouets:
    _ id
    _ ordre
    _ libelle

    Voici ma requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT CMD.id,
           CMD.date,
           GROUP_CONCAT(DISTINCT J.libelle, ' (', CONVERT(JCMD.quantite, CHAR(8)), ')' ORDER BY J.ordre SEPARATOR '<br/>') AS detail
    FROM commandes CMD
        INNER JOIN jouets_commandes JCMD ON CMD.id = JCMD.commande_id
        INNER JOIN jouets J ON J.id = JCMD.jouet_id

    En faite, j'aimerai faire la somme de mes quantités dans mon group_concat.
    C'est à dire écrire quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GROUP_CONCAT(DISTINCT J.libelle, ' (', CONVERT(SUM(JCMD.quantite), CHAR(8)), ')' ORDER BY J.ordre SEPARATOR '<br/>') AS detail
    Cependant, ceci n'est pas possible avec MySQL.

    Quelqu'un aurait une solution?

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    J'ai trouvé une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    SELECT CMD.id,
           CMD.date,
           GROUP_CONCAT(TMP.libelle, ' (', CONVERT(TMP.quantite, CHAR(8)), ')' ORDER BY TMP.ordre SEPARATOR '<br/>') AS detail
    FROM commandes CMD
        INNER JOIN jouets_commandes JCMD ON CMD.id = JCMD.commande_id
        INNER JOIN jouets J ON J.id = JCMD.jouet_id
        INNER JOIN
    (
    SELECT CMD.id AS cmd,
           J.id AS jouet,
           J.libelle,
           SUM(JCMD.quantite) AS quantite,
           J.ordre
    FROM commandes CMD
        INNER JOIN jouets_commandes JCMD ON CMD.id = JCMD.commande_id
        INNER JOIN jouets J ON J.id = JCMD.jouet_id
    GROUP BY J.id
    )TMP ON TMP.cmd = CMD.id AND TMP.jouet = J.id

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Vous donnez bien la structure des tables mais pas le résultat que vous souhaitez obtenir. Vous ne risquez pas d'être aidé.

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Vous avez raison!
    En faite je voulais passer de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    poupee 1
    poupee 1
    poupee 1
    voiture 3
    voiture 1
    a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    poupee (3) <br/> voiture (4)
    (concaténer les 5 ligne en 1)

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Faire la somme des quantités par article et par commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT 
    	COMMANDE.ID as CMD_ID, 
    	COMMANDE.DATE as CMD_DATE, 
    	JOUETS.ID AS JOU_ID, 
    	JOUETS.LIBELLE AS JOU_LIBELLE, 
    	SUM(JOUETS_COMMANDES.QUANTITE) as JOUCMD_QTE
    FROM COMMANDE 
    	INNER JOIN JOUETS_COMMANDES 
    		ON COMMANDE.ID = JOUETS_COMMANDES.COMMANDE_ID
    		INNER JOIN JOUETS 
    			ON JOUETS_COMMANDES.JOUET_ID = JOUETS.ID
    GROUP BY 
    	COMMANDE.ID,
    	COMMANDE.DATE, 
     	JOUETS.ID, 
    	JOUETS.LIBELLE
    Attention, vous faîtes plusieurs choses de travers :

    - vous utilisez le SGBD pour faire de la présentation (lignes en colonnes, formattage du résultat)
    - vous nommez mal vos tables (mélange singulier/pluriel, utilisation de mots clés reservés SQL comme "DATE" pour une colonne, disparité des noms de colonne dans la table de base et la table référencée, ...)

    Utilisez votre base de données et SQL pour ramener les informations brutes qui vous intéressent et exploitez le résultat dans la partie client/code pour tout ce qui est affichage. Ici une simple boucle sur le résultat.

  6. #6
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Merci de votre réponse.
    En effet, j'utilise le SGBD pour faire de la présentation car je n'ai pas le choix (j'utilise le logiciel BIRT pour traiter le résultat et il ne me propose pas de concaténer comme je le souhaite)!

    Au sujet des noms des tables, ce n'est pas les vrais nom, je les ai juste changée pour confidentialité mais la structure est la même.

    Donc votre requête résume bien ce que je veux faire mais elle me renvoie plusieurs ligne alors que j'en veux qu'une!

    Elle me renverait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    poupee 3
    voiture 4

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

Discussions similaires

  1. [ACCESS2002][fonction sum dans une requête]
    Par louroulou dans le forum Access
    Réponses: 1
    Dernier message: 14/06/2006, 09h26
  2. utiliser le resultat d'un SUM dans une variable
    Par Qapoka dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/05/2006, 15h47
  3. Utiliser le résultat de SELECT Sum dans If
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 33
    Dernier message: 15/11/2005, 08h38
  4. SUM dans where
    Par francon81 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/06/2005, 17h02
  5. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 10h18

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