我有一个与此类似的问题 --> 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+3
and2+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
给定场景的两个特征使问题变得棘手:
即使有多个可能的组合,每个新生也只能与其他(非新生)学生匹配。
一旦创建了好友配对匹配,这些学生将不再可用于其他匹配。
与此同时,我用一个 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 中的同一个学生可能会匹配多次。但是,每个学生可能只有一个伴侣。其次,选择随机匹配。我想要的是分数差异最小的比赛。
任何帮助表示赞赏