根據列(X)的值求列的總和,並取得存在 X 的另一列的所有值
P粉439804514
P粉439804514 2024-04-01 09:28:58
0
2
429

我有下表:

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

全部回覆(2)
P粉578343994

在 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 上查看

P粉323374878

您可以簡單地使用 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` ;

如果您想要一些其他分隔符,您也可以專門定義它。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板