首页 > 解决方案 > SQL sum 按字段分组,所有行

问题描述

我有这张桌子:

id  sale_id  price
-------------------
1     1       100
2     1       200
3     2       50 
4     3       50

我想要这个结果:

id  sale_id  price  sum(price by sale_id)
------------------------------------------
1     1       100    300
2     1       200    300
3     2       50      50
4     3       50      50

我试过这个:

SELECT id, sale_id, price, 
(SELECT sum(price) FROM sale_lines GROUP BY sale_id) 
FROM sale_lines

但是得到子查询返回不同行数的错误。我该怎么做?

我希望 sale_lines 表的所有行选择所有字段并添加按 sale_id 分组的总和(价格)。

标签: sqlgroup-bysumrows

解决方案


您可以使用窗口功能:

sum(price) over (partition by sale_id) as sum

如果您想要子查询,那么您需要将它们关联起来:

SELECT sl.id, sl.sale_id, sl.price, 
       (SELECT sum(sll.price) 
        FROM sale_lines sll 
        WHERE sl.sale_id = sll.sale_id 
        ) 
FROM sale_lines sl;

推荐阅读