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

SQL如何统计登录1次、2次、3次的对应用户数量?

解决方案

你当前的核心需求是对单用户登录次数的聚合结果做二次聚合,由于SQL执行顺序的限制,聚合生成的occurrences字段无法直接在当前查询的GROUP BY子句中使用,只需要将你现有的查询作为临时中间表,在外层做二次统计即可,以下是两种可直接在Mode平台运行的实现方案:

方案1:子查询嵌套实现

SELECT
  occurrences AS 登录次数,
  COUNT(user_id) AS 用户数量
FROM (
  SELECT
    Users.user_id,
    COUNT(Users.user_id) AS occurrences
  FROM
    tutorial.playbook_users Users
    JOIN tutorial.playbook_events EVENTS ON Users.user_id = EVENTS.user_id
  WHERE
    EVENTS.event_name = 'login'
  GROUP BY 1
) AS user_login_stats
WHERE occurrences IN (1,2,3) -- 只统计登录1、2、3次的情况,不需要限制可删除该行
GROUP BY 1
ORDER BY 1

方案2:CTE(公共表表达式)实现

逻辑更清晰,可读性更高:

WITH user_login_stats AS (
  SELECT
    Users.user_id,
    COUNT(Users.user_id) AS occurrences
  FROM
    tutorial.playbook_users Users
    JOIN tutorial.playbook_events EVENTS ON Users.user_id = EVENTS.user_id
  WHERE
    EVENTS.event_name = 'login'
  GROUP BY 1
)
SELECT
  occurrences AS 登录次数,
  COUNT(user_id) AS 用户数量
FROM user_login_stats
WHERE occurrences IN (1,2,3) -- 只统计登录1、2、3次的情况,不需要限制可删除该行
GROUP BY 1
ORDER BY 1

原理说明

SQL的执行顺序为FROM/JOIN→WHERE→GROUP BY→聚合计算→HAVING→SELECT→ORDER BY,你在原有查询中定义的occurrences别名在GROUP BY执行阶段还未生成,因此无法直接引用,必须先将聚合结果存储为临时表后再做二次分组统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:54:03