mysql - 找到用户问题答案匹配百分比的最佳方法是什么?

标签 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 个问题

理想情况下,这应该能够处理那些回答了许多不同问题的人,这些问题可能对每个人来说都不一样(即他们跳过他们不想回答的问题。

感谢您对此的任何帮助!我真的不知道该怎么办。

最佳答案

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

相关文章:

java - 用单个 SQL 语句填充一个包含另一个 pojo 的数组列表的 pojo,并正确迭代结果集

sql - 如何加速 SQL 中的 LIKE 操作(最好是 Postgres)

mysql - 使用另一个表中的条件连接进行更新 [MySQL]

php - 从表单输入中获取值,将其乘以 MySQL 表单元格值,并将结果写入同一表中的另一个单元格

php - 引用php代码部分

php - mysql 没有返回所有行

mysql - SQL 连接添加缺失的时间和标识符数据

c++ - pthread_join 用法

java - Android和MYSQL中从listView中删除记录

php - 带有 php 和 mysql 的空白页