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

如何通过单SQL查询获取分组的用户登录状态多维度统计数据

单次SQL查询获取分组用户登录统计数据

可以通过条件聚合函数结合多表关联,在一次查询中完成所有统计需求。核心思路是用CASE WHEN配合COUNT实现不同条件下的用户计数,再通过简单算术运算得到占比。

完整SQL查询语句

SELECT
    g.group_name AS 分组名称,
    COUNT(u.user_id) AS 用户总数,
    COUNT(CASE WHEN u.last_login IS NOT NULL THEN u.user_id END) AS 已登录用户数,
    COUNT(CASE WHEN u.last_login IS NULL THEN u.user_id END) AS 未登录用户数,
    ROUND(
        IFNULL(
            COUNT(CASE WHEN u.last_login IS NOT NULL THEN u.user_id END) / NULLIF(COUNT(u.user_id), 0),
            0
        ) * 100,
        2
    ) AS 已登录用户占比
FROM
    `group` g
LEFT JOIN group_user gu ON g.group_id = gu.group_id
LEFT JOIN `user` u ON gu.user_id = u.user_id
GROUP BY
    g.group_id, g.group_name
ORDER BY
    g.group_name;

关键部分说明

  • 多表关联:使用LEFT JOIN确保所有分组都能被统计(即使分组下没有用户),如果只需要统计有用户的分组,可改为INNER JOIN。
  • 条件计数:
    • COUNT(u.user_id)统计分组下的总用户数(自动忽略NULL值,即未关联到用户的记录)
    • COUNT(CASE WHEN u.last_login IS NOT NULL THEN u.user_id END)仅统计last_login不为空的用户,即已登录用户数
    • 未登录用户数也可以用用户总数 - 已登录用户数替代,结果一致
  • 占比计算:
    • NULLIF(COUNT(u.user_id), 0)避免分组用户数为0时出现除以0的错误
    • IFNULL(..., 0)将空占比转为0,ROUND(..., 2)将结果保留两位小数并转为百分比格式

内容的提问来源于stack exchange,提问作者Shawn Northrop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:25:22