说我有这样一张桌子:
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
一旦我得到这个,我以为我会做一个计数和分组。但这并没有给我我想要的东西。
任何线索都表示赞赏。
答案 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