-3

我面临着非常困难的 pb,我找不到实现这一目标的方法,我想计算有多少次出现等于 member1(id1) 的出现,正如你在这里看到的那样,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       1       8   5
4   2440          oui       2       9   1

在这个例子中,结果应该是:

id  count
4     5
2     4
3     1

请问什么样的查询可以实现,有可能吗?!

4

3 回答 3

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在这里

于 2013-07-09T11:10:53.567 回答
0

这是 SQLFiddel 的 Working DEMO

以下是示例查询

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
于 2013-07-09T10:58:57.100 回答
-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
于 2013-07-09T11:02:27.243 回答