计算来自另一张表、在指定分组中至少有一条记录的ID的百分比

编程语言 2026-07-11

我在一个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

db<>fiddle演示

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章