我有下表:
id | 程式碼 | 金額 | 數量 |
---|---|---|---|
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 |
我想找到 code = 1 的所有金額的總和,對於所有此類事件,還需要所有數量的逗號分隔值和所有 id 的逗號分隔值。
例如: 輸出應如下圖所示:
程式碼 | 金額 | 數量 | id |
---|---|---|---|
1 | 80 | 36, 100,1, 20 | 1,4,5,7 |
我知道我可以做類似的事情
SELECT code ,SUM(amount) FROM table1 where code = 1 group by code;
用於取得與該程式碼相對應的總和,但不知道如何取得所有此類數量和 ID。
DBFiddle
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 |
在 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;
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` ;
如果您想要一些其他分隔符,您也可以專門定義它。