如何执行SQL查询以根据特定列的给定值对行进行分组。例如,假设我们有一个表1
id | quantity | price
1 | 10 | 1.5
2 | 5 | 2
3 | 8 | 2.5
4 | 20 | 1
5 | 3 | 4
6 | 4 | 5
7 | 1 | 7
并且希望得到另一个带有值的表2的查询
id
1
3
7
并且我希望有一个结果表,对给定ID之前的行进行分组。所以像这样的事情
id | total quantity | total cost
1 | 10 | 15
3 | 23 | 45
7 | 51 | 104
不确定是否应该称之为分组,它更像是一个从开始到特定行/ID的连接/聚合结果。
如果您的MySql版本为8.0+,请使用sum()
窗口函数:
SELECT *
FROM (
SELECT id,
SUM(quantity) OVER (ORDER BY id) total_quantity,
SUM(quantity * price) OVER (ORDER BY id) total_cost
FROM table1
) t
WHERE id IN (SELECT id FROM table2)
对于以前的版本,您可以通过连接和聚合来实现:
SELECT t2.id,
SUM(t1.quantity) total_quantity,
SUM(t1.quantity * t1.price) total_cost
FROM table2 t2
INNER JOIN table1 t1 ON t1.id <= t2.id
GROUP BY t2.id
ORDER BY t2.id
请参阅演示。