mysql 统计_mysql数据统计级别技巧
生活随笔
收集整理的這篇文章主要介紹了
mysql 统计_mysql数据统计级别技巧
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文提及技巧只適用數(shù)據(jù)統(tǒng)計,OLAP場景,不建議用于業(yè)務sql。
?
分組top問題
知識點:巧用局部變量,實現(xiàn)Hive窗口分析函數(shù)功能row_number() over(partition by exam_id)
題目:如下表,記錄每個學生的成績,用sql求出每班前五名的學生id和成績。
create?table?student( id?int(11)?comment?"學生id", class?int(3)?comment?"班級", score?int(3)? comment "成績");解答1:巧用臨時變量
劃重點:mysql的臨時變量賦值順序是:from --> select,select子句字段按從上到下順序執(zhí)行。
select id, class, scorefrom ( select id, class , score, if(@cur_class <> class, @seq:=0, null) temp_seq, if(@cur_class=class and @last_score <> score,@seq:=@seq+1,@seq) as seq , @cur_class:=class, @last_score:=score from student a ,(select @cur_class:=0,@seq:=0, @last_score:=0) t0 order by class asc , score desc)?t1?where?t1.seq?<= 5;解答2:使用子查詢
select t1.id, t1.class, t1.scorefrom student t1where ??(select?count(1)?c?from?student?t2?where?t2.class?=?t1.class?and?t2.score?>=?t1.score?)?<=?5前后記錄關聯(lián)——求次日留存
題目:如下表,記錄用戶訪問流水,求次日留存率。
create?table?visit_log( userId?int(20)?comment?"用戶id",??visitDate?datetime?comment?"訪問時間");思路:次日留存率 = 交集(當天訪問用戶?和?下一天訪問用戶)/?當天訪問用戶數(shù)
解答:
select????date_format(visitDate,?"%Y-%m-%d")?as?`日期`,????count(distinct?if(date_format(user_next_date,?"%Y-%m-%d")) =?date_format(date_add(visitDate,interval 1 day), "%Y-%m-%d"),uid?,?null?))?????/?count(distinct?uid?)?as??`次日留存率`from ( select visitDate, uid ,????????--?查出當前記錄用戶,下一次訪問日期????????(select?min(visitDate)?from?visit_log?where?date_add(date_format(a.visitDate ,?"%Y-%m-%d 00:00:00"),interval 1 day)?and?a.userId?=?userId?)? from visit_log a ) a group by date_format(visitDate, "%Y-%m-%d");總結
以上是生活随笔為你收集整理的mysql 统计_mysql数据统计级别技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 联表求和不重复_别再瞎忙了
- 下一篇: python获取当前窗口句柄_人生苦短,