我试图在用户ACL上运行报告。我们使用MYSQL,出于性能原因,我们禁止使用子查询。目标是转变:
--------------------------------
| userName | folderID | roleID |
--------------------------------
| gronk | 1 | 1 |
| gronk | 2 | 2 |
| gronk | 4 | 2 |
| tbrady | 1 | 2 |
| jedelman | 1 | 1 |
| jedelman | 2 | 1 |
| mbutler | 1 | 2 |
| mbutler | 2 | 2 |
| bill | 1 | 3 |
| bill | 2 | 3 |
| bill | 3 | 3 |
| bill | 4 | 3 |
--------------------------------
进入这个:
------------------------
| Lowest Role | Number |
------------------------
| 1 | 2 |
| 2 | 2 |
| 3 | 1 |
------------------------
我可以看到如何使用子查询来完成它。内部查询将使用min(roleID)在userName上执行分组。然后外部查询将按最低角色和计数(*)进行分组。但我不知道如何在没有子查询的情况下做到这一点。
另外,如果有帮助我创建了一个包含上述数据的SQL Fiddle。
答案 0 :(得分:0)
我找到了一个使用左连接的解决方案:
select UFM.roleID, count(distinct UFM.userName)
from UserFolderMembership UFM
left join UserFolderMembership UFM2 on
UFM.userName = UFM2.userName and
UFM.roleID > UFM2.roleID
where
UFM2.userName is null
group by
UFM.roleID