如何执行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
请参阅演示。
我有一个产品类: 如果group是一个单独的字段,就像name一样,我可以这样做: 如何使用? 预期的结果如下所示,对于productList中存在的每个组,映射到在其字段中具有该组的产品列表
问题内容: 我有一个包含时间戳名为RDD 时间 长整型: 我正在尝试按值1,值2和时间分组为YYYY-MM-DD。我尝试按演员分组(时间为日期),但随后出现以下错误: 这是否意味着无法按日期分组?我什至尝试添加另一级别的强制转换以将其作为字符串: 哪个返回相同的错误。 我已经读到我可以在RDD上使用gregationByKey,但我不明白如何在几列中使用它并将其转换为YYYY-MM-DD字符串。我
问题内容: 我有如下数据 O / P就是这样。 我已尝试使用以下查询,但未成功,请提出建议。 得到了解决方案.. 从测试表中选择f1.id,f1.stat,f1.cdate作为F1加入(从stat从测试表组中选择stat,MAX(cdate)作为dt)作为F2在f2.stat= F1.stat和f2.dt = f1.cdate 问题答案: SELECT t1.id, t1.stat, t1.dat
问题内容: 假设我有一个这样的列表: 我如何最优雅地将其分组以在Python中获得此列表输出: 因此,这些值按次值分组,但顺序保留下来。 问题答案:
问题内容: 您好,我浏览了一段时间的论坛,并在这里问我的第一个问题。我有点束手无策,想知道是否能得到一些帮助。我正在使用Access 2007,但尚未在网上找到一个很好的答案。 我的数据是诊断代码和客户ID,而我正在寻找的原因就是为什么要为每个诊断代码找到不同的客户ID计数。理想情况下,在非Access SQL中,它看起来应该像这样: 我知道这是一个非常简单的问题,但是我发现的答案太复杂(多个聚合
问题内容: 我有以下几点: http://sqlfiddle.com/#!6/226ae/1 我现在尝试为一年中的每个星期添加一行,并相应地过滤联系人。CONTACTS有一个datetime列。新表将如下所示: 我认为需要使用DATEADD,但是在如何开始更改查询方面我迷茫了。 我确实知道MySQL具有GROUP BY WEEK命令,但我认为SQL没有等效的命令。做到这一点的最佳方法是什么? 问题