如何在MYSQL中计算两列的差异

时间:2019-01-29 15:45:41

标签: mysql

我有一张表格,其中有来自参与者的代码为倍数的代码,我想按多少参与者使用多少个不同代码来对它们进行分组。

这是我的桌子

| CodeID | ClientID |
--------------------
|   1    |    36    |
|   1    |    36    |
|   2    |    36    |
|   3    |    36    |
|   10   |    36    |
|   9    |    36    |
|   3    |    36    |
|   2    |    36    |
|   1    |    38    |
|   1    |    39    |
|   1    |    40    |
|   2    |    40    |
|   3    |    40    |
|   1    |    41    |
|   2    |    41    |

我尝试了Group By,但结果却只有一半:

SELECT COUNT(DISTINCT CodeID) AS Codes, ClientID FROM Entry GROUP BY ClientID ORDER BY Codes

给我这个

| Codes | ClientID |
--------------------
|   1   |    38    |
|   1   |    39    |
|   2   |    41    |
|   3   |    40    |
|   5   |    36    |

我要寻找的结果是这样:

| Codes | Clients |
-------------------
|   1   |    2    |
|   2   |    1    |
|   3   |    1    |
|   5   |    1    |

我不知道是否有一种方法用倍数GROUP BY或使用子查询...

要做到这一点

3 个答案:

答案 0 :(得分:2)

如果您想要每个代码ID的客户端数量,则应进行反操作

Input Javascript

答案 1 :(得分:0)

再加上一个GROUP BY。

SELECT cnt, count(CodeID)
  FROM ( SELECT CodeID, count(distinct ClientID) cnt
           FROM Entry
           GROUP BY CodeID
       ) T
  GROUP BY cnt

答案 2 :(得分:0)

根据您的回答,我编辑了代码以使其正常运行,非常感谢!

SELECT Codes, COUNT(ClientID) AS Clients 
    FROM ( SELECT COUNT(DISTINCT CodeID) AS Codes, ClientID 
           FROM Entry 
           GROUP BY ClientID) Result 
    GROUP BY Codes