sql - 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 分组的总和(价格)。
解决方案
您可以使用窗口功能:
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;
推荐阅读
- javascript - React Router Dom 在转到特定路由时返回一个空白页面
- powershell - Export-Csv 没有按我的预期工作
- type-conversion - 如何在 Crystal 中将字符串转换为整数或浮点数?
- vba - VBA查找值并将其放在特定列中
- python - 使用 LIKE (pyqt5) 在 mysql 中选择语句
- ios - UISearchController 显示问题 - iPhone X 和其他设备
- php - 雄辩 | 使用 with() 导致返回 NULL
- php - 在 PHP 中从字符串中的内容创建一个数组
- keras - 如何在 keras 中为一维数据(pca/zca 处理后的数据)建立模型?
- sql - 如何根据特定条件在 SQL 中将行分成列?