我有两张桌子
用户
id_user|INT
company | varchar
和
日志
log_id|int
id_user|int
我需要退回公司,每家公司的用户总数以及拥有至少3个日志的用户百分比
我可以运行此查询来获取公司并计算
select company, count (*) as 'Count'
from user
group by company
返回此
Apple| 7
Google| 6
但是我无法弄清楚如何返回一个额外的列,显示那些至少有3个日志的用户的百分比。例如, 如果有2个用户拥有超过3个来自Apple的日志,而有一个来自Google的用户拥有超过3个日志,则答案如下:
Apple| 7| 29% (because 2/7=~29%)
Google| 6| 17% (because 1/7=~17%)
我认为这需要使用windows函数或某种类型的相关子查询,但我在准确获取正确的百分比方面存在问题。
非常感谢任何帮助。 (使用SQL Server 2008)
答案 0 :(得分:0)
我实际上可以在不使用窗口函数的情况下执行此操作,但可能有一个版本可以使用它们。首先,我汇总了CTE中每个用户的日志数。然后,我将用户表加入到此,使用条件聚合来计算每个公司有3个或更多日志的用户数。
WITH cte AS (
SELECT id_user, COUNT(*) AS cnt
FROM Log
GROUP BY id_user
)
SELECT
u.company,
COUNT(DISTINCT u.id_user) AS total_users,
100.0 * SUM(CASE WHEN c.cnt >= 3 THEN 1 ELSE 0 END) /
COUNT(DISTINCT u.id_user) AS log_3_users
FROM [User] u
LEFT JOIN cte c
ON u.id_user = c.id_user
GROUP BY
u.company;
请注意,在演示中,我只有一些虚拟数据,其中3个Google用户中有1个拥有3个或更多日志,2个Microsoft员工中有1个拥有3个或更多日志。