#P4865. 第1题-游戏道具交易数据分析(SQL)
-
1000ms
Tried: 0
Accepted: 0
Difficulty: 3
所属公司 :
米哈游
时间 :2026年4月28日
算法与标签>模拟
第1题-游戏道具交易数据分析(SQL)
No testdata at current.
解题思路
本题需要统计2025年4月1日至2025年4月30日期间,指定品质道具的已完成交易数据。
核心算法是SQL中的分组聚合。
具体步骤如下:
1. 将iteminfo表和traderecord表按照itemid进行连接。
题目内容
某款开放世界游戏运营团队需要对2025年4月份的玩家道具交易情况进行数据分析。系统中有两张相关数据表:道具信息表(item_info)、交易记录表(trade_record)。运营团队希望通过分析各类道具的交易数据,了解玩家对不同品质道具的需求情况,以便后续调整道具掉落率和市场定价策略。
item_info(道具信息表)
- item_id: INT, 道具 ID, 主键
- item_name: VARCHAR(50), 道具名称
- item_type: VARCHAR(20), 道具类型(Weapon、Armor、Material、Consumable)
- quality: VARCHAR(10), 道具品质(Common、Rare、Epic、Legendary)
- base_price: INT, 基础价格(游戏金币)
trade_record(交易记录表)
- trade_id: BIGINT, 交易 ID, 主键
- item_id: INT, 道具 ID
- seller_id: BIGINT, 卖家玩家 ID
- buyer_id: BIGINT, 买家玩家 ID
- trade_price: INT, 成交价格(游戏金币)
- trade_quantity: INT, 交易数量
- trade_time: DATETIME, 交易时间
- trade_status: TINYINT, 交易状态(0-已取消,1-已完成,2-已申诉)
问题
查询2025年4月1日至2025年4月30日期间,满足以下条件的道具交易统计信息:
- 只统计已完成(trade_status=1)的交易记录
- 只统计品质为"Rare"、"Epic" 或 "Legendary" 的道具
- 需要输出以下字段:
- 道具名称(item_name)
- 道具品质(quality)
- 交易总次数(trade_count):交易记录数
- 交易总数量(total_quantity):所有交易的数量之和
- 交易总金额(total_amount):所有交易的 trade_price * trade_quantity 之和
- 价格波动(price_status):若该道具的最高成交单价超过基础价格的 150% 则为 "High",低于基础价格则为 "Low",否则为 "Normal"
按交易总金额降序排列,若交易总金额相同则按道具名称升序排列。
样例1
输入
--创建表
CREATE TABLE item_info (
item_id INT PRIMARY KEY,
item_name VARCHAR(50) NOT NULL,
item_type VARCHAR(20) NOT NULL,
quality VARCHAR(10) NOT NULL,
base_price INT NOT NULL
);
CREATE TABLE trade_record (
trade_id BIGINT PRIMARY KEY,
item_id INT NOT NULL,
seller_id BIGINT NOT NULL,
buyer_id BIGINT NOT NULL,
trade_price INT NOT NULL,
trade_quantity INT NOT NULL,
trade_time DATETIME NOT NULL,
trade_status TINYINT NOT NULL
);
-- 插入示例数据
-- 道具数据
INSERT INTO item_info VALUES (1, 'IronSword', 'Weapon', 'Common', 100);
INSERT INTO item_info VALUES (2, 'FlameBreaker', 'Weapon', 'Rare', 500);
INSERT INTO item_info VALUES (3, 'DragonSlayer', 'Weapon', 'Epic', 2000);
INSERT INTO item_info VALUES (4, 'Excalibur', 'Weapon', 'Legendary', 10000);
INSERT INTO item_info VALUES (5, 'ShadowCloak', 'Armor', 'Rare', 600);
INSERT INTO item_info VALUES (6, 'TitanPlate', 'Armor', 'Epic', 2500);
INSERT INTO item_info VALUES (7, 'MagicCrystal', 'Material', 'Rare', 50);
-- 交易记录数据
INSERT INTO trade_record VALUES (80001, 2, 1001, 2001, 550, 10, '2025-04-01 10:00:00', 1);
INSERT INTO trade_record VALUES (80002, 2, 1002, 2002, 800, 15, '2025-04-03 11:00:00', 1);
INSERT INTO trade_record VALUES (80003, 3, 1001, 2003, 2200, 5, '2025-04-05 12:00:00', 1);
INSERT INTO trade_record VALUES (80004, 3, 1003, 2001, 2400, 8, '2025-04-07 13:00:00', 1);
INSERT INTO trade_record VALUES (80005, 4, 1002, 2002, 12000, 2, '2025-04-09 14:00:00', 1);
INSERT INTO trade_record VALUES (80006, 5, 1001, 2003, 580, 20, '2025-04-11 15:00:00', 1);
INSERT INTO trade_record VALUES (80007, 6, 1003, 2001, 2800, 10, '2025-04-13 16:00:00', 1);
INSERT INTO trade_record VALUES (80008, 7, 1002, 2002, 60, 100, '2025-04-15 17:00:00', 1);
INSERT INTO trade_record VALUES (80009, 7, 1001, 2003, 45, 80, '2025-04-17 18:00:00', 1);
INSERT INTO trade_record VALUES (80010, 1, 1001, 2003, 120, 50, '2025-04-20 21:00:00', 1);
INSERT INTO trade_record VALUES (80011, 4, 1003, 2001, 11000, 1, '2025-04-22 22:00:00', 0);
INSERT INTO trade_record VALUES (80012, 3, 1002, 2002, 2300, 4, '2025-03-30 10:00:00', 1);
INSERT INTO trade_record VALUES (80013, 6, 1001, 2002, 2600, 5, '2025-04-25 11:00:00', 2);
输出
item_name|quality|trade_count|total_quantity|total_amount|price_status
DragonSlayer|Epic|2|13|30200|Normal
TitanPlate|Epic|1|10|28000|Normal
Excalibur|Legendary|1|2|24000|Normal
FlameBreaker|Rare|2|25|17500|High
ShadowCloak|Rare|1|20|11600|Low
MagicCrystal|Rare|2|180|9600|Normal