You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何补全SQL计算曾浏览用户个人资料页的用户占比

原有代码问题

你写的查询存在一个常见逻辑错误:LEFT OUTER JOIN 后在WHERE层判断e.event_name = 'view_user_profile',会把没匹配到对应浏览事件的用户全部过滤掉,效果等同于内连接,最终只能拿到有浏览行为的用户列表,没法统计总用户基数,算不出占比。

正确SQL实现

写法1:基于你原有逻辑修正

把事件筛选条件从WHERE移到JOIN的关联条件里,避免过滤无浏览行为的用户,直接一步算出占比:

SELECT
  ROUND(
    -- 统计有浏览记录的用户数 / 总用户数,转成百分比保留2位小数
    COUNT(CASE WHEN e.event_id IS NOT NULL THEN u.id END) / COUNT(u.id) * 100,
    2
  ) AS view_profile_user_rate
FROM dsv1069.users u
LEFT OUTER JOIN dsv1069.events e
  ON e.user_id = u.id
  AND e.event_name = 'view_user_profile'

写法2:大表场景下的高性能写法

如果events表数据量很大,JOIN操作会比较慢,可以用子查询分别统计分子分母,避免全表关联:

SELECT
  ROUND(
    (SELECT COUNT(DISTINCT user_id)
     FROM dsv1069.events
     WHERE event_name = 'view_user_profile')
    / COUNT(id) * 100,
    2
  ) AS view_profile_user_rate
FROM dsv1069.users

口径说明:第二种写法会自动排除events表中user_id不存在于users表的脏数据,统计结果更贴合「平台注册用户中曾浏览个人资料页的占比」这个需求。

内容的提问来源于stack exchange,提问作者Hristijan Smilkoski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:54:14