4

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

我正在计划一个如下所示的 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 最相似。

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

4

2 回答 2

0
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
于 2012-06-26T14:46:50.997 回答
0
SELECT 
yt1.user,
SUM(CASE WHEN yt1.answer = yt2.answer THEN 1 ELSE 0 END) AS howMuchAnswersInCommon
FROM yourTable yt1
INNER JOIN yourTable yt2 ON yt1.question = yt2.question 
WHERE yt2.user = 1 AND yt1.user != 1
GROUP BY yt1.user
ORDER BY howMuchAnswersInCommon DESC 
;

这将为您提供最常见的用户 1 答案。

测试数据:

/*
create table yourTable (user int, question int, answer int);
insert into yourTable values 
(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);
*/

输出:

user    howMuchAnswersInCommon
4           4
3           3
2           2
于 2012-06-26T14:58:44.627 回答