SQL查询包括SUM和GROUPBY

时间:2014-03-25 13:34:51

标签: mysql sql datetime group-by sum

我正在创建一个时间跟踪系统,而且我正在努力应对相当复杂的SQL查询。

基本上我想创建一个列表,列出当前记录工作会话的特定模块的所有分配,包括每次分配所花费的总时间。

到目前为止,我已使用TIMESTAMPDIFF()来比较StartTimeEndTime列,以计算在该特定工作会话上花费的总时间TimeSpent。但是,我很难理解我如何将工作会话按AssignmentID分组,然后SUM()将所有TimeSpent列组合在一起,以便给出总体总数。

这是我到目前为止所构建的内容。

SELECT t2.*, 
SUM( TIMESTAMPDIFF(second, t1.StartTime, t1.EndTime) ) AS TimeSpent 
FROM work_session t1 
LEFT JOIN assignment t2 ON t1.AssignmentID = t2.AssignmentID 
LEFT JOIN module t3 ON t2.ModuleID = t3.ModuleID 
LEFT JOIN course t4 ON t3.CourseID = t4.CourseID 
WHERE t2.ModuleID = 3
GROUP BY t1.AssignmentID   

1 个答案:

答案 0 :(得分:0)

要获得总数,请使用WITH ROLLUP作为“超级聚合”数据:

SELECT t2.*, 
SUM( TIMESTAMPDIFF(second, t1.StartTime, t1.EndTime) ) AS TimeSpent 
FROM work_session t1 
LEFT JOIN assignment t2 ON t1.AssignmentID = t2.AssignmentID 
LEFT JOIN module t3 ON t2.ModuleID = t3.ModuleID 
LEFT JOIN course t4 ON t3.CourseID = t4.CourseID 
WHERE t2.ModuleID = 3
GROUP BY t1.AssignmentID
WITH ROLLUP

来自文档:

mysql> SELECT year, SUM(profit) FROM sales GROUP BY year;
+------+-------------+
| year | SUM(profit) |
+------+-------------+
| 2000 |        4525 |
| 2001 |        3010 |
+------+-------------+

汇总:

mysql> SELECT year, SUM(profit) FROM sales GROUP BY year WITH ROLLUP;
+------+-------------+
| year | SUM(profit) |
+------+-------------+
| 2000 |        4525 |
| 2001 |        3010 |
| NULL |        7535 |
+------+-------------+