我有一个非常难的问题/情况: 我有一个数据库可以将几个任务划分给一些工人。 在下一个例子中,我有两个任务(任务1和任务2)和4个员工(1,2,3和4) 在1个任务上工作的最大员工是3个。因此,我有3列可以获得所有可能的选项(在此示例中,并非显示每个选项!)。最后一列是一个值,表示该选项有多好(数字越大越好)。
目标是获得最佳状态,这意味着:
值的总和是最高可能值
+------------+------------+------------+------+--------+ | Employee_1 | Employee_2 | Employee_3 | Task | Value | +------------+------------+------------+------+--------+ | 1 | | | 1 | 5.0 | | 2 | | | 1 | -2.5 | | 3 | | | 1 | 1.0 | | 4 | | | 1 | 0.5 | | 1 | 2 | | 1 | 0.5 | | 1 | 4 | | 1 | 5,0 | | 1 | 2 | 3 | 1 | 0.33 | | 2 | 3 | | 1 | -4.5 | | 2 | 3 | 4 | 1 | -6.5 | | 3 | 4 | | 1 | 3.0 | | 1 | | | 2 | 1.0 | | 2 | | | 2 | 2.0 | | 3 | | | 2 | -5.0 | | 4 | | | 2 | 3.0 | | 1 | 2 | | 2 | -2.0 | | 1 | 2 | 3 | 2 | -3.5 | | 2 | 3 | | 2 | 5.0 | | 2 | 3 | 4 | 2 | 0.5 | | 3 | 4 | | 2 | 2.0 | +------------+------------+------------+------+--------+
正如您所看到的:有时效率更高: 员工1在任务1上获得值5 员工4在任务1上获得0.5的值 员工1和3在任务1上获得值5,0 在这种情况下,员工1和3最好分开工作,查询应该给出两行:
+------------+-------------+------------+-------+---------+
| Employee_1 | Employee_2 | Employee_3 | Task | Value |
+------------+-------------+------------+-------+---------+
| 1 | | | 1 | 5.0 |
| 4 | | | 1 | 0.5 |
+------------+-------------+------------+-------+---------+
此示例的真正解决方案应该是:
+------------+-------------+------------+-------+---------+
| Employee_1 | Employee_2 | Employee_3 | Task | Value |
+------------+-------------+------------+-------+---------+
| 1 | | | 1 | 5.0 |
| 2 | 3 | | 2 | 5.0 |
| 4 | | | 2 | 3.0 |
+------------+-------------+------------+-------+---------+
由于员工1在任务1上拥有非常高的价值 员工3本身非常糟糕,但与员工2一起,他们在任务2上做得很好 员工4是唯一留下的员工,这名员工非常擅长任务2.
问题是编写查询以获得此结果