SQL 按字段对所有行分组的总和
SQL sum grouped by field with all rows
我有这个table:
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
但是得到子查询returns不同行数的错误。
我该怎么做?
我想要 sale_lines table 的所有行选择所有字段并添加按 sale_id 分组的总和(价格)。
您可以使用window函数:
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;
不要在子查询中使用GROUP BY
,使其成为相关子查询:
SELECT sl1.id, sl1.sale_id, sl1.price,
(SELECT sum(sl2.price) FROM sale_lines sl2 where sl2.sale_id = sl.sale_id) as total
FROM sale_lines sl1
除了其他方法,您还可以使用CROSS APPLY 求和。
SELECT id, sale_id,price, Price_Sum
FROM YourTable AS ot
CROSS APPLY
(SELECT SUM(price) AS Price_Sum
FROM YourTable
WHERE sale_id = ot.sale_id);
SELECT t1.*,
total_price
FROM `sale_lines` AS t1
JOIN(SELECT Sum(price) AS total_price,
sale_id
FROM sale_lines
GROUP BY sale_id) AS t2
ON t1.sale_id = t2.sale_id
我有这个table:
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
但是得到子查询returns不同行数的错误。 我该怎么做?
我想要 sale_lines table 的所有行选择所有字段并添加按 sale_id 分组的总和(价格)。
您可以使用window函数:
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;
不要在子查询中使用GROUP BY
,使其成为相关子查询:
SELECT sl1.id, sl1.sale_id, sl1.price,
(SELECT sum(sl2.price) FROM sale_lines sl2 where sl2.sale_id = sl.sale_id) as total
FROM sale_lines sl1
除了其他方法,您还可以使用CROSS APPLY 求和。
SELECT id, sale_id,price, Price_Sum
FROM YourTable AS ot
CROSS APPLY
(SELECT SUM(price) AS Price_Sum
FROM YourTable
WHERE sale_id = ot.sale_id);
SELECT t1.*,
total_price
FROM `sale_lines` AS t1
JOIN(SELECT Sum(price) AS total_price,
sale_id
FROM sale_lines
GROUP BY sale_id) AS t2
ON t1.sale_id = t2.sale_id