首页 > 解决方案 > MySQL中的按计数输出分组?

问题描述

我有一个关于组合 COUNT 和 GROUP BY 查询的问题(MySQL 的新功能)。

+---------+------+
| Visitor | Shop |
+---------+------+
| Mark    | aaa  |
| Mark    | aaa  |
| Mark    | bbb  |
| Mark    | ccc  |
| Jane    | aaa  |
| Jane    | bbb  |
| Cody    | aaa  |
| Cody    | aaa  |
| Cody    | bbb  |
+---------+------+

我使用此查询来查找每个访客访问的不同商店的数量:

SELECT Visitor, COUNT(DISTINCT Shop) AS unique_shops
FROM my_table
GROUP BY Visitor
ORDER BY unique_shops DESC

它工作得很好,但现在我想做相反的事情并计算有多少人访问了相同数量的不同商店(有多少人访问了 1、2、3 等不同的商店)。

+---------+-------- +
| Shops   | Visitors|
+---------+---------+
| 2       | 2       |
| 3       | 1       |
+---------+---------+

我以为我可以通过按 unique_shops 变量分组来做到这一点,但 MySQL Workbench 显示错误。然后我正在考虑将 unique_shops 存储为一个单独的列,然后以某种方式将名称与之匹配……但可能应该有一种更直接的方法。谢谢你。

标签: mysqlsql

解决方案


只需使用多一层聚合:

SELECT unique_shops, COUNT(*) as num_visitors
FROM (SELECT Visitor, COUNT(DISTINCT Shop) AS unique_shops
      FROM my_table
      GROUP BY Visitor
     ) v
GROUP BY unique_shops
ORDER BY unique_shops DESC;

推荐阅读