Heim  >  Fragen und Antworten  >  Hauptteil

Ermitteln Sie die Summe der Spalten basierend auf den Werten der Spalte (X) und erhalten Sie alle Werte einer anderen Spalte, in der X vorhanden ist

Ich habe folgende Tabelle:

id Code Betrag Menge
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

Ich möchte die Summe aller Beträge ermitteln, für die der Code = 1 ist, und benötige außerdem durch Kommas getrennte Werte aller Mengen und durch Kommas getrennte Werte aller IDs für alle derartigen Ereignisse.

Zum Beispiel: Die Ausgabe sollte so aussehen:

Code Betrag Menge id
1 80 36, 100,1, 20 1,4,5,7

Ich weiß, dass ich etwas Ähnliches tun kann

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

, um die diesem Code entsprechende Summe zu erhalten, weiß aber nicht, wie ich alle diese Mengen und IDs erhalten kann.

DBFiddle

P粉439804514P粉439804514185 Tage vor335

Antworte allen(2)Ich werde antworten

  • P粉578343994

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

    在 MySQL 中,您可以使用 GROUP_CONCAT

    查询#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;
    代码 total_amount id qts
    1 80 1,4,5,7 36,100,1,20

    在 DB Fiddle 上查看

    在 Postgres 中,您可以使用 string_agg

    查询#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;
    代码 total_amount id qts
    1 80 1,4,5,7 36,100,1,20

    在 DB Fiddle 上查看

    Antwort
    0
  • P粉323374878

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

    您可以简单地使用 GROUP_CONCAT 对所有数据进行分组:

    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 默认使用逗号 (,) 作为分隔符,因此您可以编写相同的查询:

    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` ;

    如果您想要一些其他分隔符,您也可以专门定义它。

    Antwort
    0
  • StornierenAntwort