使用分析函式改寫cube,使其一步滿足需求

2021-06-21 05:16:48 字數 1665 閱讀 9981

要求:分等級的使用者數 / 不分等級的總使用者數

step1:求 分等級的使用者數 和 不分等級的總使用者數 ,但他們位於同一列

select to_date(v_yesterday ,'yyyymmdd') visit_time ,r.reg_channel ,r.server_id ,

decode(grouping(r.role_level),1,9999 ,role_level) role_level ,

count(distinct u.device_mark) total_role_user ,sysdate

from   game_role_log_history r ,game_user_log u

where  to_char(r.afferent_time ,'yyyymmdd') = v_yesterday and r.user_name = u.user_name

group by r.reg_channel ,r.server_id ,cube(r.role_level) ;

step2:自關聯後,讓分等級的使用者數和不分等級的總使用者數字於兩列,方便兩列相除

select a.* ,b.role_level ,b.total_role_user from game_total_role_server a ,game_total_role_server b

where a.reg_channel = b.reg_channel and a.server_id = b.server_id

and a.role_level <> 9999 and b.role_level = 9999;

將上面兩步改寫成乙個sql:

select distinct reg_channel ,server_id ,role_level ,

max(a.no_level_role_user) over (partition by reg_channel ,server_id) as "不分等級" ,

max(a.level_role_user) over (partition by reg_channel ,server_id ,role_level) as "某等級"

from

(select r.reg_channel ,r.server_id ,r.role_level ,

dense_rank() over (partition by r.reg_channel ,r.server_id order by u.device_mark) as no_level_role_user ,

dense_rank() over (partition by r.reg_channel ,r.server_id ,r.role_level order by u.device_mark) as level_role_user

from   game_role_log_history r ,game_user_log u

where  to_char(r.afferent_time ,'yyyymmdd') = '20140324' and r.user_name = u.user_name and u.device_mark is not null

) a ;

注意:u.device_mark is not null 如果不加這個條件,會把null排名,就會比count(distinct u.device_mark)大1

t 使用getopt改寫main函式

一 執行ees test 原始的輸入方式 a.首先進入可執行檔案所在的目錄 cd home lihaoliang eclipse workspace nichebreadth default b.執行可執行檔案,並附帶引數 nichebreadth home lihaoliang ees test ...

分析函式ratio to report的使用

ratio to report 函式syntax 分析函式 ratio to report 用來計算當前記錄的指標 expr 佔開窗函式 over 中包含記錄的所有同一指標的百分比 這裡如果開窗函式的統計結果為 null 或者為0,就是說占用比率的被除數為 0或者為 null,則得到的結果也為 0....

分析函式ratio to report的使用

ratio to report函式 syntax 分析函式ratio to report 用來計算當前記錄的指標expr佔開窗函式over中包含記錄的所有同一指標的百分比.這裡如果開窗函式的統計結果為null或者為0,就是說占用比率的被除數為0或者為null,則得到的結果也為0.開窗條件query ...