LeetCode:Database 12.ゲームプレイ解析IV
要求:SQLクエリーを作成し、最初にログインした翌日に再ログインしたプレイヤーの比率を報告し、小数点以下2桁まで四捨五入する.すなわち、初回ログイン日から少なくとも2日間連続してログインしたプレイヤーの数を計算し、プレイヤー総数で除算する必要があります.
Activityテーブルの構造:
Activityテーブル:
Result table:
分析:方法1:1.要求登録時間は初回登録の翌日であるため、初日登録のプレイヤー2を選別する必要がある.翌日も登録するプレイヤー3を絞り込む.初回登録と翌日登録のプレイヤー数を求め、合計人数で割る最終結果4を得る.最終結果はround()関数を用いて2ビットメソッド2:1を保持する.初回登録の翌日の日付、表中の同一プレイヤーの2回目の登録の日付を取得する.初回登録の翌日の日付が表の2回目の登録の日付と同じであるプレイヤーを選別し、合計人数で割る最終結果3を得る.最終結果round()関数を使用して2ビット保持
SQL文:
Activityテーブルの構造:
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| player_id | int |
| device_id | int |
| event_date | date |
| games_played | int |
+--------------+---------+
(player_id,event_date) 。
。
, ( 0)
Activityテーブル:
+-----------+-----------+------------+--------------+
| player_id | device_id | event_date | games_played |
+-----------+-----------+------------+--------------+
| 1 | 2 | 2016-03-01 | 5 |
| 1 | 2 | 2016-03-02 | 6 |
| 2 | 3 | 2017-06-25 | 1 |
| 3 | 1 | 2016-03-02 | 0 |
| 3 | 4 | 2018-07-03 | 5 |
+-----------+-----------+------------+--------------+
Result table:
+-----------+
| fraction |
+-----------+
| 0.33 |
+-----------+
ID 1 , 1/3 = 0.33
分析:方法1:1.要求登録時間は初回登録の翌日であるため、初日登録のプレイヤー2を選別する必要がある.翌日も登録するプレイヤー3を絞り込む.初回登録と翌日登録のプレイヤー数を求め、合計人数で割る最終結果4を得る.最終結果はround()関数を用いて2ビットメソッド2:1を保持する.初回登録の翌日の日付、表中の同一プレイヤーの2回目の登録の日付を取得する.初回登録の翌日の日付が表の2回目の登録の日付と同じであるプレイヤーを選別し、合計人数で割る最終結果3を得る.最終結果round()関数を使用して2ビット保持
SQL文:
#1. 1
WITH t AS(
SELECT i1,d1 FROM(
SELECT player_id AS i1,event_date AS d1,dense_rank() over(PARTITION BY player_id ORDER BY event_date) AS r
FROM Activity)a
WHERE r=1
)
select round(count(distinct b.player_id)/count(distinct c.player_id),2) as fraction
from t
join Activity b
on t.i1=b.player_id and datediff(b.event_date,t.d1)=1
join Activity c;
#2. 2
SELECT ROUND(COUNT(DISTINCT a.player_id)/COUNT(DISTINCT b.player_id),2) as fraction
FROM(
SELECT player_id,event_date,ADDDATE(event_date,1) AS d1,lead(event_date,1,0) over(PARTITION BY player_id ORDER BY event_date ASC) AS d2,
dense_rank() over(PARTITION BY player_id ORDER BY event_date ASC)AS r
FROM Activity
)a
JOIN Activity b
ON a.r=1 AND a.d1=a.d2;