mysql - sql 计算两个值共享另一列中相同值的次数

标签 mysql sql

这是我的表格:

ID  State
---------
0   A   
1   A   
2   C   
3   C   
2   A      
3   A    
2   D      
0   D    
2   E      
3   F    

结果如下:

ID1 ID2 N_State
---------
0   1   1
2   3   2
2   0   1

问题是: 统计两个ID共有的状态个数并按上述格式输出?

最佳答案

select      t1.id,t2.id,count(*) as N_State

from                mytable t1
            join    mytable t2
            on      t2.State = t1.State
                and t2.id > t1.id 

group by    t1.id,t2.id

+----+----+----------+
| id | id | count(*) |
+----+----+----------+
| 0  | 1  | 1        |
+----+----+----------+
| 0  | 2  | 2        |
+----+----+----------+
| 0  | 3  | 1        |
+----+----+----------+
| 1  | 2  | 1        |
+----+----+----------+
| 1  | 3  | 1        |
+----+----+----------+
| 2  | 3  | 2        |
+----+----+----------+

添加行号

select      @i:=@i+1 as i
           ,id1,id2,N_State

from        (select      t1.id as id1,t2.id as id2,count(*) as N_State

             from                mytable t1

                         join    mytable t2

                         on      t2.State = t1.State
                             and t2.id > t1.id 

             group by    t1.id,t2.id
             ) t

             cross join (select @i:=-1) x

order by    id1,id2

关于mysql - sql 计算两个值共享另一列中相同值的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41220065/

相关文章:

javascript - 无法更新我的 MySQL 数据库中的一个单元格?

php - 执行更多或更复杂的 SQL 查询,或使用 PHP 过滤数据?

mysql - 如果没有模型文件,该表如何更新?

c# - 使用 C# 将 Null 插入数据库

mysql - 有没有办法通过 WHERE IN 语句将嵌套子查询中的别名列名传递给 UPDATE 语句?

c# - 使用多个分组依据字段时按日期分组的 Linq

c++ - ADODB/C++ : What does "Execute" return when single value is returned?

MySQL查询获取连接表结果

php - 使用 php 显示我的数据库中的相关记录

java - Spring启动CrudRepository mysql