如何编写SQL统计自引用表中A级别用户下辖的C级别人数并排序
解决方案
原表信息
现有members表结构及数据如下:
| id | level | name | managedBy |
|---|---|---|---|
| 1 | A | Erik | |
| 2 | B | Jerald | 1 |
| 3 | C | Alexis | 2 |
| 4 | A | Johnathan | |
| 5 | C | Doreen | 2 |
| 6 | B | Jay | 4 |
| 7 | C | Robin | 6 |
| 8 | C | Victor | 6 |
| 9 | C | Ethel | 6 |
需求为:统计每位A级用户下辖的C级用户数量,并按数量从多到少排序,期望输出如下:
| Name | memberCount |
|---|---|
| Johnathan | 3 |
| Erik | 2 |
SQL语句
SELECT a.name AS Name, COUNT(c.id) AS memberCount FROM members a LEFT JOIN members b ON a.id = b.managedBy LEFT JOIN members c ON b.id = c.managedBy WHERE a.level = 'A' GROUP BY a.id, a.name ORDER BY memberCount DESC;
逻辑说明
- 先筛选出所有A级用户作为主表
a - 通过
LEFT JOIN关联该A级用户直接管理的B级用户表b(关联条件:a.id = b.managedBy) - 再次通过
LEFT JOIN关联B级用户管理的C级用户表c(关联条件:b.id = c.managedBy) - 按A级用户的
id和name分组,统计每组对应的C级用户数量(COUNT(c.id)) - 最后按统计得到的
memberCount降序排序,得到期望结果
内容的提问来源于stack exchange,提问作者Dong Nguyen
相关产品推荐
相关产品推荐

