SQLite查询根据最大值选择最佳选项

时间:2014-02-13 20:29:32

标签: sqlite max unique combinations

我有一个非常难的问题/情况: 我有一个数据库可以将几个任务划分给一些工人。 在下一个例子中,我有两个任务(任务1和任务2)和4个员工(1,2,3和4) 在1个任务上工作的最大员工是3个。因此,我有3列可以获得所有可能的选项(在此示例中,并非显示每个选项!)。最后一列是一个值,表示该选项有多好(数字越大越好)。

目标是获得最佳状态,这意味着:

  • 每位员工都必须完成一项任务(而且不能完成2项任务)
  • 值的总和是最高可能值

    +------------+------------+------------+------+--------+
    | 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.

问题是编写查询以获得此结果

0 个答案:

没有答案