2014-03-25 2 views
0

나는 시간 추적 시스템을 만들고 있으며, 상당히 복잡한 SQL 쿼리로 고민하고있다.SUM과 GROUPBY를 포함한 SQL 쿼리

기본적으로 각 과제에 소비 된 총 시간을 포함하여 현재 작업 세션이 기록 된 특정 모듈에 대한 모든 과제 목록을 만들고 싶습니다.

지금까지 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 
+0

하여 제공하는 것을 고려 적절한 DDL (및/또는 sqlfiddle) DE와 함께 SIRED RESULT SET. 또한 WHERE 조건은 t3을 INNER JOIN으로 렌더링합니다. OUTER JOIN을 원하면 JOIN 절로 이동하십시오. – Strawberry

+0

이 작업을 수행하려면 group by 절에있는 select의 모든 열을 포함해야합니다. 그룹화 그룹화 그룹화 ((모든 열)) – Jaypal

+1

@ Jaypal MySQL은 GROUP BY에 나열되지 않은 열을 선택할 수 있도록 허용하며, 해당 그룹의 값을 반환합니다. – Vatev

답변

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 | 
+------+-------------+ 
관련 문제