leetcode數(shù)據(jù)庫類型:1142.過去30天的用戶活動(dòng)2甚负,難度:簡(jiǎn)單
解答:
? ? ? ?本題使用到的round(x,d):四舍五入保留x的d位小數(shù)柬焕;ifnull(x1,x2):如果x1為null,返回x2腊敲;本題的重點(diǎn)就是要理解每個(gè)用戶的平均會(huì)話數(shù)击喂。用戶即為 user_id维苔,無論什么時(shí)候永遠(yuǎn)不會(huì)變碰辅。會(huì)話是對(duì)應(yīng)的 session_id,用戶的 session_id 會(huì)在特定的情況下改變介时,比如 end_session 后再 open_session没宾。所以我們只需要統(tǒng)計(jì)總的會(huì)話數(shù)和總的用戶數(shù)凌彬,相除就是平均數(shù),即:COUNT(session_id) / COUNT(user_id)循衰;這個(gè)數(shù)字還需要加工處理:由于表里面可能有重復(fù)的數(shù)據(jù)铲敛,所以需要使用 DISTINCT 去重。使用 ROUND() 保留兩位有效數(shù)字会钝。使用 IFNULL 處理返回結(jié)果為 null 的情況伐蒋。只需要查找截至 2019-07-27 日(含)的 30 天內(nèi)的數(shù)據(jù),有兩種辦法(注意是截至不是截止):計(jì)算出第一天迁酸,使用 BETWEEN :WHERE activity_date BETWEEN '2019-06-28' AND '2019-07-27'先鱼。使用 datediff() 函數(shù),計(jì)算當(dāng)天與最后一天的差值:WHERE datediff('2019-07-27',activity_date) < 30奸鬓。