A和B列包含也出现在B&A列中的值的次数

问题描述 投票:0回答:3

在我的数据库中,我有一个包含这些值的表:

column_a,column_b
1,2
3,4
2,1
4,3
3,1
5,6
1,4
1,3

我能够知道特定值和任何其他值之间有多少次匹配。取值“ 1”:

SELECT COUNT(*) FROM (SELECT * FROM `table` WHERE `column_a` = 1) as T1
JOIN (SELECT * FROM `table` WHERE `column_b` = 1) as T2
WHERE T1.`column_b` = T2.`column_a`

[结果将为2,因为我们有1,22,11,33,1-> 1匹配2和3。

现在,我想知道比赛的总数。此处为3(因为3,44,3)。

有人有想法吗?

谢谢

mysql sql
3个回答
2
投票

解决此问题的一种方法是计算找到匹配对的所有情况,但限制匹配,以便仅选择column_a大于column_b的对以避免重复:

SELECT COUNT(*)
FROM `table` t1
WHERE EXISTS (
  SELECT * 
  FROM `table` t2
  WHERE t2.column_b = t1.column_a AND t2.column_a = t1.column_b
    AND t2.column_a < t1.column_a
)

输出:

3

Demo on SQLFiddle


0
投票

您也可以使用least()greatest()功能:

SELECT COUNT(*)
FROM (SELECT COUNT(*)
      FROM `table` t1
      GROUP BY LEAST(column_a, column_B), GREATEST(column_a, column_B)
      HAVING COUNT(*) > 1
     ) t;

这里是demo


0
投票

这里是一种方法:

select count(distinct case when a = 1 then b else a end)
from t
where 1 in (a, b);

Here是db <>小提琴。

© www.soinside.com 2019 - 2024. All rights reserved.