在用户对问题的回答中找到百分比匹配的最佳方法是什么?

时间:2011-05-05 17:24:46

标签: mysql sql join inner-join

我有一个用户对预定义的真/假问题列表的答案的数据集。数据如下所示:

+---------+-------------+--------+----+
| 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%兼容的。)

对此有一些限制,希望能让它变得更容易:

  1. 每个用户至少有10个答案被视为
  2. 每个人都回答了前10个问题
  3. 理想情况下,这应该能够处理那些已经回答了许多可能对每个人都不一样的问题的人(即他们跳过他们不想回答的问题。

    感谢您的帮助!我真的不知所措。

1 个答案:

答案 0 :(得分:1)

我的第一个是使用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

相关问题