如何在SQL中按公司统计用户总数及有≥3条日志用户的占比
解决公司用户日志占比统计问题
嘿,我来帮你搞定这个需求!你已经写出了统计各公司用户总数的基础语句,现在只需要把用户日志数量的统计逻辑和它结合起来,就能得到你要的占比列了。
完整SQL语句
SELECT u.company, COUNT(DISTINCT u.id_user) AS total_users, COUNT(DISTINCT CASE WHEN user_logs.log_count >= 3 THEN u.id_user END) AS users_with_3plus_logs, ROUND( COUNT(DISTINCT CASE WHEN user_logs.log_count >= 3 THEN u.id_user END) * 100.0 / COUNT(DISTINCT u.id_user), 2 ) AS percentage_with_3plus_logs FROM User u LEFT JOIN ( -- 先统计每个用户的日志总数 SELECT id_user, COUNT(log_id) AS log_count FROM Log GROUP BY id_user ) user_logs ON u.id_user = user_logs.id_user GROUP BY u.company;
关键部分解释
- 子查询
user_logs:先单独统计每个用户的日志条数,这样我们能快速筛选出满足“至少3条日志”的用户。 - LEFT JOIN:用左连接保证即使某个用户没有任何日志,也会被算进公司总用户数里(避免遗漏用户)。
- 条件统计用户数:
COUNT(DISTINCT CASE WHEN user_logs.log_count >=3 THEN u.id_user END)会自动忽略日志数不足3的用户,只统计符合条件的人数。 - 占比计算:乘以
100.0是为了避免整数除法(不然结果会是0或1这种无意义的整数),ROUND(...,2)是把占比保留两位小数,让结果更直观。
示例结果
对应你提到的Apple有7个用户、Google有6个用户的场景,假设Apple有4个用户满足日志数≥3,Google有3个,结果会是这样:
| company | total_users | users_with_3plus_logs | percentage_with_3plus_logs |
|---|---|---|---|
| Apple | 7 | 4 | 57.14 |
| 6 | 3 | 50.00 |
内容的提问来源于stack exchange,提问作者nunga
相关产品推荐
相关产品推荐

