Rumah  >  Soal Jawab  >  teks badan

Cari jumlah lajur berdasarkan nilai lajur (X) dan dapatkan semua nilai lajur lain di mana X wujud

Saya mempunyai jadual berikut:

id Kod Jumlah Kuantiti
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

Saya ingin mencari jumlah semua amaun yang mana kod = 1 dan juga memerlukan nilai dipisahkan koma semua kuantiti dan nilai diasingkan koma semua id untuk semua acara tersebut.

Sebagai contoh: Output sepatutnya kelihatan seperti ini:

Kod Jumlah Kuantiti id
1 80 36, 100,1, 20 1,4,5,7

Saya tahu saya boleh melakukan sesuatu yang serupa

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

untuk mendapatkan jumlah yang sepadan dengan kod ini tetapi tidak tahu bagaimana untuk mendapatkan semua kuantiti dan ID tersebut.

DBFiddle

P粉439804514P粉439804514185 hari yang lalu337

membalas semua(2)saya akan balas

  • P粉578343994

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

    Dalam MySQL anda boleh menggunakan GROUP_CONCAT

    Pertanyaan #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;
    Kod jumlah_jumlah id qts
    1 80 1,4,5,7 36,100,1,20

    Lihat di DB Fiddle

    Dalam Postgres anda boleh menggunakan string_agg

    Pertanyaan #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;
    Kod jumlah_jumlah id qts
    1 80 1,4,5,7 36,100,1,20

    Lihat di DB Fiddle

    balas
    0
  • P粉323374878

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

    Anda boleh menggunakan GROUP_CONCAT untuk mengumpulkan semua data anda:

    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 Secara lalai koma (,) digunakan sebagai pembatas supaya anda boleh menulis pertanyaan yang sama:

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

    Jika anda mahukan pembatas lain, anda juga boleh menentukannya secara khusus.

    balas
    0
  • Batalbalas