MYSQL - 计算单个表内的差异

标签 mysql

我正在寻找一种方法来计算单个表中整数之间的差异。

我正在计划一个如下所示的 MYSQL 表:

user    question    answer

1       1           3
1       2           3
1       3           2
1       4           5
1       5           1

2       1           2
2       2           3
2       3           1
2       4           5
2       5           3

3       1           3
3       2           3
3       3           4
3       4           5
3       5           3

4       1           5
4       2           3
4       3           2
4       4           5
4       5           1

每个用户(在这个例子中)已经回答了 5 个问题,给出的答案从 1 到 5 分。

我要弄清楚的是用户 2、3 和 4 中哪一个给出的答案与用户 1 提供的答案最相似。

我的想法是计算每个用户对每个问题给出的答案与用户 1 的答案之间的差异,然后将这些差异相加。

添加后编号最小的用户与用户 1 最相似。

很抱歉,我真的不知道从哪里开始构建一个有效执行此操作的查询,并且想知道是否有人可以为我指出正确的方向? 我也乐于接受任何关于以更好或更合乎逻辑的方式来构建相同结果的建议。

最佳答案

SELECT SUM(ABS(t2.answer - t1.answer)) AS total_diff, t2.user 
FROM my_table AS t1 
LEFT JOIN my_table AS t2 USING(question)
WHERE t1.user = 1 AND t2.user != t1.user
GROUP BY t2.user
ORDER BY total_diff ASC

结果:

total_diff  user 
2       4
4       2
4       3

关于MYSQL - 计算单个表内的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11209247/

相关文章:

php - 仅播放6秒的base64编码音乐文件

mysql - Play - 不在application.conf中写入数据库配置,执行一条sql语句

c# - c# 根据用户输入选择mysql数据库

php - Mysql 2个时间字段之间包括第二天

php - 将 mysql 数据库中的字符与 php 逐个比较

mysql DATE_ADD INTERVAL 作为值

php - 执行 "weighted"SQL 查询

MySQL 事件不会执行

mysql - 试图避免多个父表

mysql - 如何合并2条sql语句并一次得到结果