Maison  >  Questions et réponses  >  le corps du texte

Trouvez la somme des colonnes en fonction des valeurs de la colonne (X) et obtenez toutes les valeurs d'une autre colonne où X existe

J'ai le tableau suivant :

id Code Montant Quantité
1 1 25 36
2 2 30 6
3 5 100 1
4 1 25 100
5 1 20 1
6 4 10 136
7 1 10 20

Je veux trouver la somme de tous les montants pour lesquels code = 1 et j'ai également besoin de valeurs séparées par des virgules de toutes les quantités et de valeurs séparées par des virgules de tous les identifiants pour tous ces événements.

Par exemple : Le résultat devrait ressembler à ceci :

Code Montant Quantité id
1 80 36, 100,1, 20 1,4,5,7

Je sais que je peux faire quelque chose de similaire

SELECT 
code
,SUM(amount) 
FROM 
table1 
where code = 1 
group by code;

pour avoir obtenu la somme correspondant à ce code mais je ne sais pas comment obtenir toutes ces quantités et identifiants.

DBFiddle

P粉439804514P粉439804514185 Il y a quelques jours339

répondre à tous(2)je répondrai

  • P粉578343994

    P粉5783439942024-04-02 00:22:58

    Dans MySQL, vous pouvez utiliser GROUP_CONCAT

    Requête n°1

    select
            code,
            sum(amount)  as total_amount,
            GROUP_CONCAT(id) as ids,
            GROUP_CONCAT(qty) qts
    
        from yourTable
        where code = 1
        GROUP BY code;
    Code montant_total id qts
    1 80 1,4,5,7 36 100,1,20

    Vue sur DB Fiddle

    Dans Postgres, vous pouvez utiliser string_agg

    Requête n°1

    select
            code,
            sum(amount)  as total_amount,
            string_agg(id::text,',') as ids,
            string_agg(qty::text , ',') qts
    
        from yourTable
        where code = 1
        GROUP BY code;
    Code montant_total id qts
    1 80 1,4,5,7 36 100,1,20

    Vue sur DB Fiddle

    répondre
    0
  • P粉323374878

    P粉3233748782024-04-02 00:12:44

    Vous pouvez simplement utiliser GROUP_CONCAT pour regrouper toutes vos données :

    SELECT 
      t.`code`,
      SUM(amount) ,
      GROUP_CONCAT(t.`qty` SEPARATOR ',') AS qtys,
      GROUP_CONCAT(t.`id` SEPARATOR ',') AS ids
    FROM
      yourTable t 
    WHERE t.`code` = 1 
    GROUP BY t.`code` ;

    GROUP_CONCAT Par défaut, la virgule (,) est utilisée comme délimiteur afin que vous puissiez écrire la même requête :

    SELECT 
      t.`code`,
      SUM(amount) ,
      GROUP_CONCAT(t.`qty`) AS qtys,
      GROUP_CONCAT(t.`id`) AS ids
    FROM
      yourTable t 
    WHERE t.`code` = 1 
    GROUP BY t.`code` ;

    Si vous souhaitez un autre délimiteur, vous pouvez également le définir spécifiquement.

    répondre
    0
  • Annulerrépondre