511. 遊戲玩法分析 I

茶山劉jf發表於2020-10-20

活動表 Activity:

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| player_id    | int     |
| device_id    | int     |
| event_date   | date    |
| games_played | int     |
+--------------+---------+
表的主鍵是 (player_id, event_date)。
這張表展示了一些遊戲玩家在遊戲平臺上的行為活動。
每行資料記錄了一名玩家在退出平臺之前,當天使用同一臺裝置登入平臺後開啟的遊戲的數目(可能是 0 個)。

寫一條 SQL 查詢語句獲取每位玩家 第一次登陸平臺的日期。

查詢結果的格式如下所示:

Activity 表:

+-----------+-----------+------------+--------------+
| player_id | device_id | event_date | games_played |
+-----------+-----------+------------+--------------+
| 1         | 2         | 2016-03-01 | 5            |
| 1         | 2         | 2016-05-02 | 6            |
| 2         | 3         | 2017-06-25 | 1            |
| 3         | 1         | 2016-03-02 | 0            |
| 3         | 4         | 2018-07-03 | 5            |
+-----------+-----------+------------+--------------+

Result 表:

+-----------+-------------+
| player_id | first_login |
+-----------+-------------+
| 1         | 2016-03-01  |
| 2         | 2017-06-25  |
| 3         | 2016-03-02  |
+-----------+-------------+

題目條件

DROP TABLE IF EXISTS `activity`;

CREATE TABLE `activity` (
  `player_id` int(11) NOT NULL,
  `device_id` int(11) DEFAULT NULL,
  `event_date` date NOT NULL,
  `games_played` int(11) DEFAULT NULL,
  PRIMARY KEY (`player_id`,`event_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

insert  into `activity`(`player_id`,`device_id`,`event_date`,`games_played`) values (1,2,'2016-03-01',5),(1,2,'2016-05-02',6),(2,3,'2017-06-25',1),(3,1,'2016-03-02',0),(3,4,'2018-07-03',5);

使用min()函式和GROUP BY分句

演算法

由於每個玩家的ID(player_id)號是不變的,那麼對每個玩家進行分組;再使用min()函式找出每個玩家的登陸記歷史錄中最早的記錄。

#  MySQL
SELECT 
  `player_id`,
  MIN(`event_date`) AS min_event_date 
FROM
  `activity` 
GROUP BY `player_id` ;

結果
在這裡插入圖片描述
來源:力扣(LeetCode)

上一題:182. 查詢/刪除重複的電子郵箱

相關文章