如何编写SQL统计Roster_table相同Group ID行数并按Count降序排列
SQL查询实现方案
需求说明
现有Roster_table表结构及样例数据如下:
| Group ID | Group Name | Name | Phone |
|---|---|---|---|
| 42 | Red Dragon | Jon | 123455678 |
| 32 | Green Lizard | Liz | 932143211 |
| 19 | Blue Falcon | Ben | 134554678 |
| 42 | Red Dragon | Reed | 432143211 |
| 42 | Red Dragon | Brad | 231314155 |
| 19 | Blue Falcon | Chad | 214124412 |
需要按Group ID分组统计每组行数,返回Group ID、Group Name、统计列Count,结果按Count降序排列。
最终SQL语句
SELECT `Group ID`, `Group Name`, COUNT(*) AS Count FROM Roster_table GROUP BY `Group ID`, `Group Name` ORDER BY Count DESC;
语句说明
- 用
COUNT(*)统计每个分组内的总行数,别名设为需求要求的Count - 因为同一个Group ID对应唯一的Group Name,所以GROUP BY同时带上这两个字段就能实现按Group ID合并的效果,兼容所有SQL模式(比如MySQL的ONLY_FULL_GROUP_BY模式也能正常运行)
- 最后用
ORDER BY Count DESC实现按统计行数从高到低排序
执行后预期输出
| Group ID | Group Name | Count |
|---|---|---|
| 42 | Red Dragon | 3 |
| 19 | Blue Falcon | 2 |
| 32 | Green Lizard | 1 |
内容的提问来源于stack exchange,提问作者jackInTrouble
相关产品推荐
相关产品推荐

