如何修正SQL以基于users数据集计算正确的订阅率?
修正后的订阅人数及订阅率计算SQL
方式一:直接输出订阅人数与整体订阅率
SELECT COUNT(CASE WHEN sign_up_at IS NOT NULL THEN user_id END) AS subscribed_users, ROUND(COUNT(CASE WHEN sign_up_at IS NOT NULL THEN user_id END) * 100.0 / COUNT(user_id), 2) AS subscription_rate FROM users;
方式二:同时输出订阅/未订阅分组数据及对应占比
WITH user_stats AS ( SELECT CASE WHEN sign_up_at IS NOT NULL THEN '已订阅' ELSE '未订阅' END AS subscription_status, COUNT(*) AS user_count FROM users GROUP BY subscription_status ) SELECT subscription_status, user_count, ROUND(user_count * 100.0 / SUM(user_count) OVER (), 2) AS rate FROM user_stats;
修正说明
- 原SQL未区分
sign_up_at是否为NULL,导致统计逻辑偏离需求。通过CASE WHEN或分组筛选,可以精准定位已订阅用户(sign_up_at不为NULL)。 - 订阅率核心逻辑为「订阅人数 / 总用户数 × 100」,用
COUNT(user_id)获取总用户数(不受NULL值干扰),再完成比例计算。 - 加入
ROUND()函数可将订阅率保留指定小数位,提升结果可读性。
内容的提问来源于stack exchange,提问作者smitkims
相关产品推荐
相关产品推荐

