假设我的数据库中有以下情况:
第一个元素是用户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如何进行排序并从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。
那就排序!我想更详细地说:请看:
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============= ============= 1 ============== ==============
具有第二个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:下一个数据在3rt id的用户中缺失;
3:(10-9) - (10-8) = ABS(-1) = 2;
4:(10-2) - (10-6) = (4) = 4;
5:通过;
============== =============2 ============== ==============
那么我需要数一数结果:
因此,它将:
用户2: COUNT = (4+7) = 11;
用户3: COUNT = (2+2+4) = 8;
并删除关于金额的这一结果:
用户2:计数=计数/2= 11/2 = 5.5;
用户3:计数=计数/3= 8/3 = 2.666666666666667;
============== =============3 ============== ==============
最后:
我只想看到那些数据的排序,第一个用户没有的和按标记排序+结果:
因此,我将有下一句:
来自第一用户:
2-5-4
来自第二个用户:
3-4-6
3-6-10
然后根据标记+结果和进行排序,最后我们将使用
1: 3-6-10,原因:(10+2.666666666666667= 12.666666666666667)
2: 2-5-4,原因:(4+5.5= 9.5)
3: 3-3-3,原因:(3+2.666666666666667= 5.666666666666667)
发布于 2014-02-16 00:45:00
获取匹配用户的列表
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;https://stackoverflow.com/questions/21805623
复制相似问题