LeetCode --- 511、512鸭廷、534枣抱、550 游戲玩法分析

LeetCode --- 數(shù)據(jù)庫(會(huì)員)
簡書專欄:http://www.reibang.com/nb/42460386

一、題目描述

來源:力扣(LeetCode)

活動(dòng)表 Activity:

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| player_id    | int     |
| device_id    | int     |
| event_date   | date    |
| games_played | int     |
+--------------+---------+
表的主鍵是 (player_id, event_date)辆床。
這張表展示了一些游戲玩家在游戲平臺(tái)上的行為活動(dòng)佳晶。
每行數(shù)據(jù)記錄了一名玩家在退出平臺(tái)之前,當(dāng)天使用同一臺(tái)設(shè)備登錄平臺(tái)后打開的游戲的數(shù)目(可能是 0 個(gè))讼载。

二轿秧、具體要求

2.1 獲取每位玩家 第一次登陸平臺(tái)的日期
查詢結(jié)果的格式如下所示:

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  |

要求返回第一次登陸的時(shí)間,那么根據(jù)ID進(jìn)行分組咨堤,再取出每組中最小的時(shí)間即為第一次登陸的時(shí)間菇篡,sql如下:

select 
    a.player_id as player_id,
    min(a.event_date) as first_login
from 
    Activity a
group by 
    a.player_id
2.2 描述每一個(gè)玩家首次登陸的設(shè)備名稱
查詢結(jié)果格式在以下示例中:

Activity table:
+-----------+-----------+------------+--------------+
| 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 table:
+-----------+-----------+
| player_id | device_id |
+-----------+-----------+
| 1         | 2         |
| 2         | 3         |
| 3         | 1         |
+-----------+-----------+

第一問已經(jīng)得到了初次登陸的時(shí)間,那么只需和原表進(jìn)行關(guān)聯(lián)一喘,即可得到初次登陸設(shè)備的ID

SELECT
    t.player_id,
    t.device_id 
FROM
    Activity t,
    ( SELECT a.player_id AS player_id, min( event_date ) AS first_time FROM Activity a GROUP BY a.player_id ) b 
WHERE
    t.player_id = b.player_id 
    AND t.event_date = b.first_time
2.3 編寫一個(gè) SQL 查詢驱还,同時(shí)報(bào)告每組玩家和日期,以及玩家到目前為止玩了多少游戲津滞。也就是說铝侵,在此日期之前玩家所玩的游戲總數(shù)灼伤。詳細(xì)情況請(qǐng)查看示例触徐。
查詢結(jié)果格式如下所示:

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

Result table:
+-----------+------------+---------------------+
| player_id | event_date | games_played_so_far |
+-----------+------------+---------------------+
| 1         | 2016-03-01 | 5                   |
| 1         | 2016-05-02 | 11                  |
| 1         | 2017-06-25 | 12                  |
| 3         | 2016-03-02 | 0                   |
| 3         | 2018-07-03 | 5                   |
+-----------+------------+---------------------+
對(duì)于 ID 為 1 的玩家,2016-05-02 共玩了 5+6=11 個(gè)游戲狐赡,2017-06-25 共玩了 5+6+1=12 個(gè)游戲撞鹉。
對(duì)于 ID 為 3 的玩家,2018-07-03 共玩了 0+5=5 個(gè)游戲颖侄。
請(qǐng)注意鸟雏,對(duì)于每個(gè)玩家,我們只關(guān)心玩家的登錄日期览祖。

進(jìn)行自關(guān)聯(lián)孝鹊,關(guān)聯(lián)條件為id相同且a表日期大于等于b表的日期,然后按照player_id,event_date進(jìn)行分組展蒂,利用sum函數(shù)統(tǒng)計(jì)即可得到到目前為止的游戲數(shù)量

select 
        a.player_id,
        a.event_date,
        sum(b.games_played) as games_played_so_far
from 
    Activity a,Activity b
where 
    a.player_id = b.player_id and a.event_date >= b.event_date
group by
    a.player_id,a.event_date
2.4 編寫一個(gè) SQL 查詢又活,報(bào)告在首次登錄的第二天再次登錄的玩家的分?jǐn)?shù)苔咪,四舍五入到小數(shù)點(diǎn)后兩位。換句話說柳骄,您需要計(jì)算從首次登錄日期開始至少連續(xù)兩天登錄的玩家的數(shù)量团赏,然后除以玩家總數(shù)。

(注意是首次登陸后的第二天耐薯,首次登陸時(shí)間在2.1中已得到解決)

查詢結(jié)果格式如下所示:

Activity table:
+-----------+-----------+------------+--------------+
| 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

目標(biāo)表自身去關(guān)聯(lián)首次時(shí)間的臨時(shí)表,判斷時(shí)間相差1天即可得到目標(biāo)id曲初。再在外層套用一層調(diào)用count()函數(shù)統(tǒng)計(jì)人數(shù)体谒,除以總?cè)藬?shù),利用round函數(shù)四舍五入保留兩位小數(shù)即得到結(jié)果

SELECT
    round(count( * ) / ( SELECT COUNT( * ) FROM ( SELECT DISTINCT player_id FROM Activity ) m ),2) AS fraction 
FROM
    (
SELECT DISTINCT
    a.player_id 
FROM
    Activity a,
    ( SELECT player_id, min( event_date ) first_date FROM activity GROUP BY player_id ) b 
WHERE
    a.player_id = b.player_id 
    AND TIMESTAMPDIFF( DAY, b.first_date, a.event_date ) = 1 
    ) t
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末臼婆,一起剝皮案震驚了整個(gè)濱河市营密,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌目锭,老刑警劉巖评汰,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異痢虹,居然都是意外死亡被去,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門奖唯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惨缆,“玉大人,你說我怎么就攤上這事丰捷∨髂” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵病往,是天一觀的道長捣染。 經(jīng)常有香客問我,道長停巷,這世上最難降的妖魔是什么耍攘? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮畔勤,結(jié)果婚禮上蕾各,老公的妹妹穿的比我還像新娘。我一直安慰自己庆揪,他們只是感情好式曲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缸榛,像睡著了一般吝羞。 火紅的嫁衣襯著肌膚如雪始鱼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天脆贵,我揣著相機(jī)與錄音医清,去河邊找鬼。 笑死卖氨,一個(gè)胖子當(dāng)著我的面吹牛会烙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筒捺,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柏腻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了系吭?” 一聲冷哼從身側(cè)響起五嫂,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肯尺,沒想到半個(gè)月后沃缘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡则吟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年槐臀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氓仲。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡水慨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出敬扛,到底是詐尸還是另有隱情晰洒,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布啥箭,位于F島的核電站谍珊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捉蚤。R本人自食惡果不足惜抬驴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缆巧。 院中可真熱鬧,春花似錦豌拙、人聲如沸陕悬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捉超。三九已至胧卤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拼岳,已是汗流浹背枝誊。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惜纸,地道東北人叶撒。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像耐版,于是被迫代替她去往敵國和親祠够。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Roman to Integer 題目描述 思路: 題意:羅馬數(shù)字最多只有一個(gè)“左邊修飾” 有左邊修飾進(jìn)兩位粪牲,默認(rèn)...
    fjxCode閱讀 502評(píng)論 0 0
  • 文/雲(yún)墨寒 “人生”這個(gè)極為廣義的詞語腺阳,是那么的深不可測落君,讓人難以琢磨,誰都不知下一秒的路程會(huì)不會(huì)還繁華似錦亭引。有時(shí)...
    雲(yún)墨寒閱讀 803評(píng)論 5 17
  • 南國江山起戰(zhàn)途叽奥, 楚人一意復(fù)舊都。 封侯稱霸豪杰夢痛侍, 榮耀一生終究輸朝氓。
    鬼谷擺攤閱讀 200評(píng)論 0 0
  • 我說 我們?cè)谝黄鸲潭痰倪@段時(shí)間 可是仿佛已經(jīng)經(jīng)歷了很久 你說,是的 第一次我想放棄的時(shí)候 是你告訴我主届,我們有多不合...
    M_CCC閱讀 257評(píng)論 0 0
  • 今天三八女神節(jié)赵哲,隔天早起行走在找尋陽光的路上,從一眼茫茫黑君丁,到兩眼陽光媚枫夺,日積月累的是希望的光,身體的健...
    可愛的Echo閱讀 103評(píng)論 0 0