Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 此查询计数是否不可能?_Mysql_Sql_Count - Fatal编程技术网

Mysql 此查询计数是否不可能?

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

我面对的是非常困难的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       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