我有一个包含3列的小桌子:
+---------------------------+
| col 1 | col2 | col 3 |
+---------------------------+
| A | B | 10 |
| A | B | 20 |
| B | A | 20 |
| B | C | 10 |
| B | C | 20 |
| A | C | 10 |
| C | A | 10 |
我想要的是计算每对(col 1,col 2)得到的第3列的不同值的数量。 我的问题是我无法处理双重因为(A,B)与(B,A)相同。
以下是我试图获得的结果:
+------------------------+
| col 1 | col 2 | count()|
+------------------------+
| A | B | 2 | // OR BA : 2
| B | C | 2 | // OR CB : 2
| A | C | 1 | // OR CA : 1
答案 0 :(得分:2)
我认为您需要count(distinct)
和least()
以及greatest()
:
select least(col1, col2) as col1, greatest(col1, col2) as col2
count(distinct col3) as cnt
from t
group by least(col1, col2), greatest(col1, col2);