1

我有一个与此类似的问题 --> Match pairs in a MySQL database,但还是有点不同。

考虑两组学生,新生和高中的所有其他学生(大二、大三和大四)。您希望将即将到来的新生与更有经验的学生配对。所有学生都填写了一份问卷,其中包含您希望用作匹配标准的分数。匹配对的分数可能相差高达 10%,但应尽可能接近。最后,如果分数根本不匹配,可能会有没有朋友的新生,而且由于非新生比新生多,当然不是每个学生都会匹配。

您的源表如下所示:

  Student ID | Group        | Score
    1        | Freshman     | 10
    2        | Freshman     | 15
    3        | Non-Freshman | 11
    4        | Non-Freshman | 16
    5        | Non-Freshman | 30
    ...

在这种情况下,1+3and2+4将是匹配的。一个完美的输出应该是这样的:

 Student ID    | Group        | Score | Matched Pair ID
     1         | Freshman     | 10    | 1
     3         | Non-Freshman | 11    | 1
     2         | Freshman     | 15    | 2
     4         | Non-Freshman | 16    | 2

给定场景的两个特征使问题变得棘手:

  1. 即使有多个可能的组合,每个新生也只能与其他(非新生)学生匹配。

  2. 一旦创建了好友配对匹配,这些学生将不再可用于其他匹配。

与此同时,我用一个 php 脚本解决了我的问题,但必须有一种方法可以用 mysql 来解决。

当我尝试...

select a.id, a.score, b.id, b.score from table t1 
join table t2 on t1.score between t2.score*0.9 and t2.score*1.1 and t1.id<>t2.id
group by a.id;

... 表 t2 中的同一个学生可能会匹配多次。但是,每个学生可能只有一个伴侣。其次,选择随机匹配。我想要的是分数差异最小的比赛。

任何帮助表示赞赏

4

0 回答 0