背景
假设你是一家提供在线项目管理SaaS公司的数据分析师。为了评估用户的产品使用深度和活跃度,公司希望对付费用户进行分析,识别出高价值的活跃用户,以便为他们提供更好的服务或营销策略。
你需要分析两张表:一张是用户信息表,记录了用户的基本信息和订阅计划;另一张是用户事件表,记录了用户在产品内的各种操作行为。
表结构和字段说明
表1:用户信息表 (users)
- user_id(INT): 用户的唯一标识符,主键。
- user_name(VARCHAR(50)): 用户名。
- registration_date(DATE): 用户的注册日期。
- plan_type(VARCHAR(20)): 用户的订阅计划类型,例如 'Free', 'Pro', 'Enterprise'。
表2:用户事件表 (user_events)
- event_id(INT): 事件的唯一标识符,主键。
- user_id(INT): 执行该事件的用户的ID。
- event_type(VARCHAR(50)): 事件的类型,例如 'login', 'create_task', 'export_report', 'invite_member'。
- event_timestamp(DATETIME): 事件发生时的精确时间。
问题
请编写一条SQL查询,统计出在2025年上半年(2025-01-01至2025-06-30)注册的'Pro'计划用户中,在2025年第一季度(2025-01-01至2025-03-31)至少有一次'login'行为的用户的活跃度。
查询结果需要包含以下字段:
- user_profile(VARCHAR): 用户信息,格式为用户名(用户ID),例如Alice(101)。
-
total_activity_score(INT): 用户的总活跃积分。积分规则如下:
- 'create_task'事件计 5 分。
- 'export_report'事件计 10 分。
- 'invite_member'事件计 8 分。
- 其他所有事件(包括'login')计 1 分。
- avg_monthly_events(DECIMAL(10, 2)): 该用户在2025年第一季度的月均事件数。计算方式为:第一季度的总事件数 / 3,结果四舍五入保留两位小数。
排序规则:
结果首先按照total_activity_score降序排列,如果积分相同,则按照avg_monthly_events降序排列,如果仍然相同,则按照user_id升序排列。
任务要求:
查询2025年上半年注册的、且在Q1至少登录过一次的'Pro'用户,计算他们的活跃积分、Q1月均事件数,并按指定规则排序。


