我遇到类似这个的问题 - > 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
和2+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的同一个学生可能会多次匹配。但是,每个学生可能只有一个合作伙伴。其次,选择随机匹配。我想要的是与得分差异最小的匹配。
感谢任何帮助