我有五张表来存储设施、员工、已完成的单位、项目和班次。
我需要确定每个设施的项目的生产力(累计完成数和累计小时数),如果设施有时间记录在项目上。设施存储在员工表中。
这是我的表结构,(减少到这个问题的必要字段):
facilities
+------------+
| id |
+------------+
| label |
+------------+
employees
+------------+
| id |
+------------+
| facility |
+------------+
completes
+------------+
| id |
+------------+
| project |
+------------+
| completes |
+------------+
| employee |
+------------+
projects
+------------+
| id |
+------------+
| title |
+------------+
shifts
+------------+
| id |
+------------+
| project |
+------------+
| length |
+------------+
| employee |
+------------+
我遇到麻烦的地方是选择设施的生产力,当它与员工一起存储时,而不是与轮班或完成次数一起存储。也许这是一个设计缺陷?班次和完成表也应该有一个设施列吗?当员工已经确定设施时,拥有设施列似乎是多余的。
SELECT p.title, SUM(c.completes), SUM(s.length)
FROM projects as p
LEFT JOIN completes as c ON c.project = p.id
LEFT JOIN shifts as s ON s.project = p.id
GROUP BY p.id, shifts.employee.facility;
那个 GROUP BY 语句当然是无效的。但它展示了我想要完成的事情。我还想在声明中选择设施标签。我该如何处理?
提前感谢您提供的任何见解!