计算来自另一张表、在指定分组中至少有一条记录的ID的百分比
我在一个SQL Server 2019数据库中有三张表。一个 Users 表,存放用户ID列表;一个 WebApps 表,存放应用程序列表;还有 WepAppAuditLogs,记录用户何时访问某个特定Web应用的日志。
我想计算每个应用至少被访问过一次的用户所占的百分比。
示例数据:
| 用户ID | 姓名 |
|---|---|
| 1 | Madeline |
| 2 | Theo |
| 3 | Granny |
| 4 | Oshiro |
| 应用ID | 应用名称 |
|---|---|
| 1 | User Management |
| 2 | Analytics |
| 3 | Security |
| 访问日志ID | 用户ID | 应用ID | 日期 |
|---|---|---|---|
| 1 | 1 | 1 | 2026-01-03 |
| 2 | 1 | 2 | 2026-01-03 |
| 3 | 2 | 3 | 2026-01-03 |
| 4 | 3 | 2 | 2026-01-04 |
| 5 | 3 | 1 | 2026-01-07 |
| 6 | 2 | 2 | 2026-01-10 |
| 7 | 2 | 3 | 2026-01-11 |
期望结果:
| 应用名称 | 使用该应用的用户百分比 |
|---|---|
| Analytics | 75% |
| Security | 25% |
| User Management | 50% |
问题
如何计算在给定分组中,至少有一条记录的用户ID的百分比?
解决方案
用每个分组中不同用户ID的数量除以总用户数量。总用户数可以通过对 Users 表进行子查询来获取。
SELECT
wa.AppName,
COUNT(DISTINCT waal.UserID) * 100.0 / (SELECT COUNT(*) FROM Users) AS UserUsagePercentage
FROM WebApps wa
LEFT JOIN WebAppAuditLogs waal
ON waal.AppID = wa.AppID
GROUP BY wa.AppName
结果:
| 应用名称 | 使用该应用的用户占比 |
|---|---|
| Analytics | 75.0000000000000 |
| Security | 25.0000000000000 |
| User Management | 50.0000000000000 |
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。