如何统计并排序每个name关联的不同category数量?
统计并排序字段关联列的不同值数量
要实现统计每个name对应的不同category数量并排序的需求,你可以使用COUNT(DISTINCT)函数配合GROUP BY和ORDER BY子句完成,具体操作如下:
核心查询语句
SELECT name, COUNT(DISTINCT category) AS distinct_category_count FROM mytable GROUP BY name ORDER BY distinct_category_count DESC, name;
语句说明
COUNT(DISTINCT category):统计每个name对应的不重复category数量,能直接得到像client_1同时属于gold和silver两个类别的结果。GROUP BY name:按name分组,确保每个name仅返回一行统计数据。ORDER BY distinct_category_count DESC, name:先按不同类别数量降序排序,数量相同时按name排序,可根据实际需求调整排序规则。
示例数据
CREATE TABLE mytable( name VARCHAR(8) NOT NULL ,category VARCHAR(6) NOT NULL ); INSERT INTO mytable(name,category) VALUES ('client_1','gold'); INSERT INTO mytable(name,category) VALUES ('client_1','gold'); INSERT INTO mytable(name,category) VALUES ('client_1','silver'); INSERT INTO mytable(name,category) VALUES ('client_2','silver'); INSERT INTO mytable(name,category) VALUES ('client_3','gold'); INSERT INTO mytable(name,category) VALUES ('client_3','gold'); INSERT INTO mytable(name,category) VALUES ('client_3','gold'); INSERT INTO mytable(name,category) VALUES ('client_4','gold');
查询结果
执行核心查询后,会得到如下结果:
| name | distinct_category_count |
|---|---|
| client_1 | 2 |
| client_2 | 1 |
| client_3 | 1 |
| client_4 | 1 |
内容的提问来源于stack exchange,提问作者jolene
相关产品推荐
相关产品推荐

