Cari jumlah lajur berdasarkan nilai lajur (X) dan dapatkan semua nilai lajur lain di mana X wujud
P粉439804514
P粉439804514 2024-04-01 09:28:58
0
2
406

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粉439804514
P粉439804514

membalas semua(2)
P粉578343994

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

P粉323374878

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan