我的尝试......:
SELECT p.name,
(SELECT SUM(p1.planned_hour)
FROM project p1
WHERE REPLACE(p1.name,'_QA','') = REPLACE(p.name,'_QA','') ) AS ProjectPlannedHour,
SUM( ROUND( TIME_TO_SEC( TIMEDIFF( vv.end_date, vv.start_date ) ) / 3600 ,2)) AS TotalHour
FROM project p
INNER JOIN working vv ON vv.project_id = p.id
GROUP BY REPLACE(p.name,'_QA','')
ORDER BY TotalHour DESC
LIMIT 0,5
Run Code Online (Sandbox Code Playgroud)
通过加入:
SELECT p.name,
p1.planned_hour AS ProjectPlannedHour,
SUM(ROUND(TIME_TO_SEC(TIMEDIFF(vv.end_date, vv.start_date)) / 3600 ,2)) AS TotalHour
FROM project p
INNER JOIN working vv ON vv.project_id = p.id
INNER JOIN (SELECT REPLACE(name,'_QA','') AS `name`,
SUM(planned_hour) AS planned_hour
FROM project
GROUP BY REPLACE(name,'_QA','')) p1
ON REPLACE(p1.name,'_QA','') = REPLACE(p.name,'_QA','')
GROUP BY REPLACE(p.name,'_QA','')
ORDER BY TotalHour DESC LIMIT 0, 5
Run Code Online (Sandbox Code Playgroud)
结果:
| NAME | PROJECTPLANNEDHOUR | TOTALHOUR |
|---------|--------------------|-----------|
| project | 2500 | 4.67 |
Run Code Online (Sandbox Code Playgroud)
也许有人给出更好的解决方案,我还无法找出更简单的查询......