如何计算两个值以任何顺序出现在两列中的次数

Ham*_* Y. 17 mysql sql database count

可以说,我们有这个表:

+------+------+
| COL1 | COL2 |
+------+------+
|   A  |   B  |
+------+------+
|   B  |   A  |
+------+------+
|   C  |   D  |
+------+------+
Run Code Online (Sandbox Code Playgroud)

我想计算两列中出现letter1, letter2letter2, letter1出现的次数.

我想要结果:

+------+------+------+
| COL1 | COL2 | COL3 |
+------+------+------+
|   A  |   B  |   2  | 
+------+------+------+
|   C  |   D  |   1  |
+------+------+------+
Run Code Online (Sandbox Code Playgroud)

注意:它可以是ABBA不重要.

我试过了:

SELECT
COL1,COL1,COUNT(*) AS COL3
FROM
X
GROUP BY COL1,COL2;
Run Code Online (Sandbox Code Playgroud)

但这让我:

+------+------+------+
| COL1 | COL2 | COL3 |
+------+------+------+
|   A  |   B  |   1  |
+------+------+------+
|   B  |   A  |   1  |
+------+------+------+
|   C  |   D  |   1  |
+------+------+------+
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 15

如果需要,可以通过交换列来执行此操作:

SELECT Col1, Col2, COUNT(*)
FROM
(
    SELECT
        CASE WHEN Col1 < Col2 THEN Col1 ELSE Col2 END AS Col1,
        CASE WHEN Col1 < Col2 THEN Col2 ELSE Col1 END AS Col2
    FROM T
) t
GROUP BY Col1, Col2
Run Code Online (Sandbox Code Playgroud)

小提琴

  • 你可以使用`LEAST`,`GREATEST`来摆脱外部查询,比如[this](http://sqlfiddle.com/#!9/7c4f77/3).虽然+1是一个很好的查询. (6认同)
  • @GiorgosBetsos - 我更喜欢编写适用于所有平台的SQL. (2认同)