我有一个用户对预定义的真/假问题列表的答案数据集。数据如下所示:
+---------+-------------+--------+----+
| user_id | question_id | answer | id |
+-------------------------------------+
| 4 | 110 | 0 | 1 |
| 4 | 111 | 1 | 2 |
| 4 | 112 | 1 | 3 |
| 4 | 113 | 0 | 4 |
|---------+-------------+--------+----|
| 6 | 110 | 0 | 5 |
| 6 | 111 | 1 | 6 |
| 6 | 112 | 0 | 7 |
| 6 | 113 | 0 | 8 |
+---------+-------------+--------+----|
我需要找到每个用户的前 10 个最佳匹配(为系统中的每个用户运行一次)。因此,为了能够根据答案按照最佳匹配的降序找到其他 10 个用户(即从上面的示例中,用户 4 和用户 6 根据他们的答案有 75% 的兼容性)。
对此有一些限制,希望能使它更容易:
- 每位用户至少要考虑 10 个答案
- 每个人都回答了相同的前 10 个问题
理想情况下,这应该能够处理那些回答了许多不同问题的人,这些问题可能对每个人来说都不一样(即他们跳过他们不想回答的问题。
感谢您对此的任何帮助!我真的不知道该怎么办。
最佳答案
我的第一个想法是使用 IF
。像这样的东西:
SELECT SUM(IF(a.answer=b.answer,1,0)) AS match, b.user_id
FROM data_table AS a
JOIN data_table AS b ON a.question_id = b.question_id
WHERE a.user_id = n
AND b.user_id <> n
GROUP BY b.user_id
ORDER BY match DESC
LIMIT 10
其中 n 是您要测试的 user_id
关于mysql - 找到用户问题答案匹配百分比的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901773/