假设我的数据库中有以下情况:
第一个元素是用户ID,第二个是一些数据,最后一个是它的标记。
1-1-1
1-2-2
1-3-4
2-4-1
2-2-1
3-1-5
3-3-1
3-2-5
4-2-2
4-1-1
5-4-1
5-6-2
如果数据在用户的另一个ID中,我如何从SQL查询ID中进行排序和返回,这些ID将通过标记进行排序
示例:如果我将ID为1
的用户数据与其他用户数据进行比较,它必须返回以下内容:
4-2-2
4-1-1
2-4-1
2-2-1
3-1-5
3-3-1
3-2-5
因此,排序将按以下顺序返回数据:4、2、3。
那就SORT!我想更详细地说:请看:
1-1-1
1-2-9
1-4-2
2-1-5
2-2-2
2-5-4
3-1-3
3-3-3
3-2-8
3-4-6
3-6-10
======================================================
第二个id的用户:
1:(10-1)-(10-5)=(4)=4
2:(10-9)-(10-2)=ABS(-7)=7
3:下一个数据是用户1中的什么-用户2中没有,我们可以轻松传递它
具有第三id的用户:
1:(10-1)-(10-3)=(2)=2
2:第3rd id的用户中没有下一个数据
3:(10-9)-(10-8)=ABS(-1)=2
4:(10-2)-(10-6)=(4)=4
5:通过
==============================================================
然后我需要计数一个结果:
所以它会:
User 2:count=(4+7)=11
用户3:COUNT=(2+2+4)=8
并删除此金额结果:
用户2:COUNT=COUNT/2=11/2=5.5
用户3:COUNT=COUNT/3=8/3=2.666666666666667
========================3==================
最后:
我只想看到对数据进行排序,第一个用户没有按标记+结果排序的数据:
所以,我会有下一行:
>来自第一个用户:
2-5-4
来自第二个用户:
3-4-6
3-6-10
然后按照标记+结果和排序,最后我们会有:
1:3-6-10,原因:(10+2.666666666666666 7=1.266666666666166 7)
2:2-5-4,病因:(4+5.5=9.5
要获得匹配的用户列表:
select t.user, count(*) as NumMatches
from table t join
table t1
on t.data = t1.data and
t.mark = t1.mark and
t1.userid = 1 and
t.userid <> 1
group by t.user;
为了获得他们的详细信息,我们必须重新加入:
select tu.*
from (select t.user, count(*) as NumMatches
from table t join
table t1
on t.data = t1.data and
t.mark = t1.mark and
t1.userid = 1 and
t.userid <> 1
group by t.user
) tu join
table t
on tu.user = t.user
order by t.NumMatches desc, t.user;