首页 > 试题广场 >

游戏平台新玩家消费与进阶行为分析

[编程题]游戏平台新玩家消费与进阶行为分析
  • 热度指数:154 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

背景

一家游戏公司希望分析其平台新玩家的用户粘性和消费潜力。他们需要识别出在特定月份注册,并在后续一个月内有消费行为的玩家,同时评估他们的游戏进度(等级)。此举旨在帮助运营团队更好地理解高价值新玩家的用户画像。

表结构和字段说明

表1:玩家信息表 (players)

  • player_id: (INT, 主键) 玩家的唯一标识。
  • username: (VARCHAR) 玩家的昵称。
  • level: (INT) 玩家的当前等级。
  • creation_date: (DATE) 玩家账户的创建日期。

表2:游戏内交易表 (transactions)

  • transaction_id: (INT, 主键) 交易的唯一标识。
  • player_id: (INT) 进行交易的玩家ID。
  • item_name: (VARCHAR) 购买的道具名称。
  • cost: (DECIMAL) 道具的价格。
  • purchase_time: (DATETIME) 购买行为发生的精确时间。

3. 问题

任务要求

请查询所有在 2025年3月 创建账户,并且在 2025年4月 期间(2025-04-01 至 2025-04-30)有过至少一次消费记录的玩家。对于这些玩家,请计算他们在4月份的总消费金额,并根据他们的当前等级进行分类:等级大于等于30级的为“高阶玩家”,否则为“新秀玩家”。

查询结果要求

请返回以下字段:

  • 玩家ID (player_id)
  • 玩家昵称 (username)
  • 当前等级 (current_level)
  • 玩家分类 (player_category)
  • 4月总消费金额 (total_april_spending),结果四舍五入保留2位小数。

排序规则

查询结果请先按player_category降序排列(即 "高阶玩家" 在前),然后按total_april_spending降序排列,最后按player_id升序排列。

示例1

输入

-- 创建玩家信息表
CREATE TABLE players (
    player_id INT,
    username VARCHAR(50),
    level INT,
    creation_date DATE
);

-- 创建游戏内交易表
CREATE TABLE transactions (
    transaction_id INT,
    player_id INT,
    item_name VARCHAR(50),
    cost DECIMAL(10, 2),
    purchase_time DATETIME
);

-- 插入示例数据
-- 玩家信息
INSERT INTO players (player_id, username, level, creation_date) VALUES
(101, 'ShadowBlade', 45, '2025-03-05'), -- 目标玩家
(102, 'RookieMist', 15, '2025-03-10'), -- 目标玩家
(103, 'AncientOne', 80, '2025-02-15'), -- 注册月份不对
(104, 'Ghost', 25, '2025-03-20');      -- 目标玩家,但在4月无消费

-- 游戏内交易
INSERT INTO transactions (transaction_id, player_id, item_name, cost, purchase_time) VALUES
(1, 101, 'Excalibur Sword', 99.99, '2025-04-02 10:00:00'),
(2, 101, 'Health Potion', 4.50, '2025-04-10 11:30:00'),
(3, 102, 'Starter Pack', 9.99, '2025-04-05 14:00:00'),
(4, 103, 'Phoenix Feather', 199.99, '2025-04-08 16:00:00'), -- 玩家不符合注册时间
(5, 101, 'Magic Shield', 45.00, '2025-04-15 18:00:00'),
(6, 102, 'Health Potion', 4.50, '2025-04-20 09:00:00'),
(7, 104, 'Mount', 29.99, '2025-03-28 17:00:00'); -- 消费月份不对

输出

player_id|username|current_level|player_category|total_april_spending
101|ShadowBlade|45|高阶玩家|149.49
102|RookieMist|15|新秀玩家|14.49

说明

示例数据表

players

player_idusernamelevelcreation_date
101ShadowBlade452025-03-05
102RookieMist152025-03-10
103AncientOne802025-02-15
104Ghost252025-03-20

transactions

transaction_idplayer_iditem_namecostpurchase_time
1101Excalibur Sword99.992025-04-02 10:00:00
2101Health Potion4.502025-04-10 11:30:00
3102Starter Pack9.992025-04-05 14:00:00
4103Phoenix Feather199.992025-04-08 16:00:00
5101Magic Shield45.002025-04-15 18:00:00
6102Health Potion4.502025-04-20 09:00:00
7104Mount29.992025-03-28 17:00:00

示例数据查询结果表

player_idusernamecurrent_levelplayer_categorytotal_april_spending
101ShadowBlade45高阶玩家149.49
102RookieMist15新秀玩家14.49
头像 冰淇淋12322
发表于 2026-02-02 11:25:43
select t.player_id, p.username, p.level as current_level, case when p.level >=30 then '高阶玩家' else '新秀玩家' end as player_category, round(sum(cost), 2 展开全文
头像 cantin
发表于 2026-02-03 21:59:15
with temp0 as ( select distinct p.player_id from players p inner join transactions t on p.player_id = t.player_id where date_format(cr 展开全文
头像 牛客907689258号
发表于 2026-02-01 14:22:40
SELECT p.player_id, p.username, p.level AS current_level, CASE WHEN p.level >= 30 THEN '高阶玩家' ELSE '新秀玩家' END A 展开全文
头像 zzu_wjh
发表于 2026-01-31 12:21:34
select a.player_id, a.username, a.level as current_level, case when a.level >= 30 then '高阶玩家' else '新秀玩家' end as playe 展开全文
头像 最爱青草蛋糕
发表于 2026-02-06 11:10:04
select player_id, username, level as current_level, if(level >= 30, '高阶玩家', '新秀玩家') as player_category, round(sum(cost),2) as total_april_spending 展开全文
头像 攸四
发表于 2026-02-06 15:26:59
select player_id, username, max(level) as current_level, max(case when level <30 then '新秀玩家' else '高阶玩家' end) as player_category, round(sum(cost), 展开全文
头像 数分菜鸟求职ing
发表于 2026-02-03 17:47:41
把高阶玩家打成高级玩家了 找半天错 服了 select player_id,username,level current_level, if(level>=30,'高阶玩家','新秀玩家') player_category, round(sum(cost),2) total_april_spe 展开全文
头像 牛客737053039号
发表于 2026-02-03 20:40:49
select p.player_id, p.username, p.level as current_level, case when p.level >= 30 then "高阶玩家" else " 展开全文