成对计数:SQL

时间:2018-02-22 01:28:44

标签: mysql sql

说我有这样一张桌子:

A | B
 ---
1 | 2 
2 | 1 
3 | 1 
1 | 3
1 | 3
5 | 6

我想写一个SQL查询来计算对,使得(a,b)=(b,a)。 在上面的例子中,由于我们有两对(1,3)和一对(3,1),我希望相应的计数为3.类似于(1,2)和(2,1)的计数是2。

最终结果应如下所示:

A | B | count
 ---
1 | 2 | 2
1 | 3 | 3
5 | 6 | 1

我尝试了以下内容:

SELECT * from table join table where table.A = table.B and table.B = table.A

一旦我得到这个,我以为我会做一个计数和分组。但这并没有给我我想要的东西。

任何线索都表示赞赏。

2 个答案:

答案 0 :(得分:2)

使用least()greatest()

select least(a, b), greatest(a, b), count(*)
from t
group by least(a, b), greatest(a, b);

答案 1 :(得分:0)

您可以使用CASE

执行相同的操作
     SELECT 

  CASE WHEN a > b THEN b ELSE a end AS a, 
  CASE WHEN a < b THEN b ELSE a end AS b ,
  COUNT(*) CountValue
FROM Table1
GROUP BY (CASE WHEN a > b THEN b ELSE a end),
           CASE WHEN a < b THEN b ELSE a end