Mysql 此查询计数是否不可能?
我面对的是非常困难的pb,我找不到实现这一点的方法,我想计算一下有多少发生率等于member1id1的发生率,如您所见, id2有4个相同的id1出现次数,id3只有1个相同的出现次数: 我的表格测试是:Mysql 此查询计数是否不可能?,mysql,sql,count,Mysql,Sql,Count,我面对的是非常困难的pb,我找不到实现这一点的方法,我想计算一下有多少发生率等于member1id1的发生率,如您所见, id2有4个相同的id1出现次数,id3只有1个相同的出现次数: 我的表格测试是: id classement aptitude A B C 1 2440 oui 2 9 1 2 2440 oui 2 9 5 3 1760 oui
id classement aptitude A B C
1 2440 oui 2 9 1
2 2440 oui 2 9 5
3 1760 oui 1 8 5
4 2440 oui 2 9 1
在本例中,预计结果应为:
id count
4 5
2 4
3 1
请问什么样的查询可以实现它,可能吗
下面是示例查询
select T1.id,
(Case T1.classement
when T2.classement Then 1 Else 0
End)+
(Case T1.aptitude
when T2.aptitude Then 1 Else 0
End)+
(Case T1.A
when T2.A Then 1 Else 0
End)+
(Case T1.B
when T2.B Then 1 Else 0
End)+
(Case T1.C
when T2.C Then 1 Else 0
End) Count
from Temp T1,
(select *
from Temp
where id =1) T2
where T1.id <> 1
and (T1.classement = T2.classement
or T1.aptitude = T2.aptitude
or T1.A = T2.A
or T1.B = T2.B
or T1.C =T2.C)
order by 2 desc
这可能会奏效:
select a.id,
length((case when a.aptitude = b.aptitude then '1' else '' end) ||
(case when a.classement = b.classement then '1' else '' end) ||
(case when a.A = b.A then '1' else '' end) ||
(case when a.B = b.B then '1' else '' end) ||
(case when a.C = b.C then '1' else '' end)) count
from test a,
(select *
from test
where id = 1) b
where a.id != 1
尝试:
SQLFiddle.不明白你想要什么,2有4个相同的发生?这是怎么回事?你能解释一下这4个原因吗?SID2和ID1是如何在同一行中同时出现的:等级、能力倾向、A、B对于ID1和ID1是相等的id2@jess那么在Id3的情况下应该是2@Luv字体为什么是2?我想应该是0。@mark,你的解决方案似乎很好,只有字段不为空时才可以计数吗?@jess:你可以将每个条件与0合并-查看更新的答案。@mark你的答案似乎很完美,不幸的是,我没有足够的声誉来投票。。
select T2.id,
coalesce((T1.classement=T2.classement),0)+
coalesce((T1.aptitude=T2.aptitude),0)+
coalesce((T1.A=T2.A),0)+
coalesce((T1.B=T2.B),0)+
coalesce((T1.C=T2.C),0) match_count
from Temp T1
cross join Temp T2
where T1.id = 1 and T2.id <> 1
order by 2 desc