2013-07-09 67 views
-3

我面对的是非常困难的pb,我没有找到实现这一目标的方法,我想知道有多少次发生等于member1(id1)的发生次数,正如你在这里看到的, id2有4次平等发生ID1和ID3的只有1 egual occurence:is this query COUNT is impossible?

我的表测试:

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 

在本例,结果expeted应该是:

id count 
4  5 
2  4 
3  1 

请告诉我这种查询可以实现它,请,有可能吗?!

+5

不明白你想要什么 –

+2

'id2有4个同样的发生'?这怎么样?你能解释一下这个4怎么来 –

+0

id2和ID1在这一行中都有4次出现:classement,aptitude,A,B等于id1和id2 – jess

回答

2

尝试:

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 

SQLFiddle here

+0

非常感谢,我正在做一些测试来比较解决方案 – jess

+0

@ mark,你的解决方案看起来不错,只有在字段不为NULL时才有可能计数吗? – jess

+0

@jess:你可以用'0'合并每个条件 - 查看更新后的答案。 –

-1

这可能会实现:

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 
+0

谢谢你们,我正在做一些测试,以copare两种解决方案 – jess

相关问题