leetcode550。ゲームプレイの解析IV(SQL)

表:アクティビティ

+ --------- + -------------- +
|カラム名|タイプ|
+ -------------- + - + -------
| player_id | int型|
| DEVICE_ID | int型|
| EVENT_DATE | DATE |
| games_played | int型|
+ ------ + -------------- + ---
(player_id、EVENT_DATE)は、このテーブルの主キーです。
このテーブルには、ゲームのプレイヤーのいくつかの活性を示します。
各行は、レコードプレーヤーです、彼はログインしてデバイスを使用して一日のキャンセルの前に(0であってもよい)多くのゲームをプレイ。
 

SQLクエリを書く、再び最初のログインログの二日目のレポートのプレイヤーのスコアが、2つの小数点以下の桁数に丸め。言い換えれば、あなたはプレイヤーをログに記録する少なくとも2日連続初回ログイン日から数を計算する必要があり、その後、選手の合計数で割ます。

次の形式で示した結果:

アクティビティテーブル:
+ ----------- + ----------- + ------------ + --------- ----- +
| player_id | DEVICE_ID | EVENT_DATE | games_played |
+ ----------- + ----------- + ------------ + ------------ - +
| 1 | 2 | 2016年3月1日| 5 |
| 1 | 2 | 2016年3月2日| 6 |
| 2 | 3 | 2017年6月25日| 1 |
| 3 | 1 | 2016年3月2日| 0 |
| 3 | 4 | 2018年7月3日| 5 |
+ ----------- + ----------- + ------------ + ------------ - +

表結果:
+ ----------- +
|端数|
+ ----------- +
| 0.33 |
+ ----------- +
のみID答えは= 0.33 1/3であるので、ログインの最初の日の後に再度ログインするプレーヤーのための1

アイデア:分析:グッドプレイヤーは常にユーザーの数は、最初の次の日に上陸しているかを確認するには、以下の頼む、お願いします。

接続が行われているので:1は、同じ日付のテーブルネストされたクエリ2の最小の日付を残し、プレーヤが同じ権利テーブル3のテーブルIDを左、左、右のシートの日付がテーブルの日であることを条件と

得られた結果は、2ラウンドを取るために使用することができます。

select round(
            (select count(distinct b.player_id)
            from Activity as b,Activity as c
            where b.event_date=(select min(temp.event_date) from Activity as temp where temp.player_id=b.player_id) and 
            b.player_id=c.player_id and
            DATEDIFF(b.event_date,c.event_date)=-1)/count(distinct a.player_id)
        ,2) as 'fraction'
from Activity as a;

 

公開された552元の記事 ウォンの賞賛10000 + ビュー132万+

おすすめ

転載: blog.csdn.net/hebtu666/article/details/104322396