基于MySQL两列唯一分组统计数据生成饼图的SQL查询问题
问题描述
现有一个MySQL表table_one,包含Column A和Column B两列,需要基于这两列的唯一组合分组统计数据(用于生成饼图)。表中原始数据如下:
| Column A | Column B |
|---|---|
| A1 | User1 |
| A1 | User1 |
| B1 | User1 |
| C1 | User2 |
| C1 | User3 |
| D1 | User1 |
| C1 | User1 |
| A1 | User1 |
| C1 | User1 |
尝试执行了以下SQL查询:
SELECT a.`columnA`,a.`columnB` FROM `table_one` a GROUP BY a.`columnA`, a.`columnB`;
但未得到预期结果,预期输出是按Column B分组,统计对应唯一(Column A, Column B)组合的数量,结果如下:
| ColumnB | Count |
|---|---|
| User1 | 4 |
| User2 | 1 |
| User3 | 1 |
请提供正确的SQL查询语句。
正确SQL语句
要实现需求,有两种简洁高效的写法:
方法1:子查询先去重再分组统计
SELECT columnB, COUNT(*) AS Count FROM ( SELECT DISTINCT columnA, columnB FROM table_one ) AS unique_pairs GROUP BY columnB;
方法2:直接使用COUNT(DISTINCT)统计
SELECT columnB, COUNT(DISTINCT columnA) AS Count FROM table_one GROUP BY columnB;
说明
- 方法1通过子查询先提取所有唯一的
(columnA, columnB)组合,再外层按columnB分组计数,逻辑直观,适合需要单独查看唯一组合的场景。 - 方法2利用
COUNT(DISTINCT columnA)直接在分组时统计每个columnB对应的不同columnA数量,代码更简洁,执行效率更高。
两种方法均可得到预期结果,可根据实际场景选择。
内容的提问来源于stack exchange,提问作者Shubhangi Seth
相关产品推荐
相关产品推荐

