mysql SQL获取字段中每个重复值的计数

dced5bon  于 2023-02-28  发布在  Mysql
关注(0)|答案(3)|浏览(140)

我有一个类似于下面的表(地址实际上是IP地址,但为了简单起见,我将它们保持简短)。

| Cust ID | Address |
| ------- | --------|
|    1    | 111     |
|    1    | 222     |
|    1    | 222     |
|    1    | 222     |
|    1    | 333     | 
|    2    | 444     | 
|    2    | 444     | 
|    2    | 444     |
|    2    | 444     |
|    3    | 555     |

我想获得每个客户的不同地址的计数,按计数排序:

| Cust ID | Address | Count |
| ------- | --------|-------|
|    2    | 444     |   4   |
|    1    | 222     |   3   |
|    1    | 111     |   1   |
|    1    | 333     |   1   |
|    3    | 555     |   1   |

因此,如上所述,客户2使用地址444四次;客户1使用地址222三次,111一次,333一次;等等。
FWIW,我用的是mysql。
谢谢!

oaxa6hgo

oaxa6hgo1#

要聚合不同客户ID之间的地址频率,请将GROUP BY子句与COUNT子句结合使用,以确定每个客户ID的地址频率。

SELECT Cust ID, Address, COUNT(*) FROM TABLE GROUP BY Cust ID, Address ORDER BY COUNT(*) DESC;

请注意,对于GROUP BY子句,将对客户ID和地址进行分组。COUNT(*)用于计算每个组中出现的所有条目。
作为另一示例,如果只希望确定地址的频率而不管它们属于哪个客户ID,则只按地址分组:

SELECT Address, COUNT(*) FROM TABLE GROUP BY Address ORDER BY COUNT(*) DESC;

但是,按多列分组(如第一种情况)会缩小结果范围,以确保考虑到两个相关列的聚合。

uoifb46i

uoifb46i2#

SELECT   CustID, Address, COUNT(*)
FROM     Cust
GROUP BY CustID, Address
ORDER BY COUNT(*) DESC;

使用GROUP BY时,一个好的经验法则是将COUNT未使用的所有选定列传递给GROUP BY。

vu8f3i0k

vu8f3i0k3#

选择CustId、地址、计数(地址)作为计数
来自客户
按客户ID、地址分组;

相关问题