HIVE:常用分析函數(shù)

1父泳、lag() over()

lag(pay_succ_time, 1, '1990-01-01 00:00:00') over(partition by user_pin order by pay_succ_time)
注:取用戶(hù)的上一筆交易時(shí)間莫矗,若無(wú)上一筆交易(即本單為用戶(hù)首單),則令上一筆交易時(shí)間=1990-01-01 00:00:00(第三個(gè)參數(shù)不寫(xiě)時(shí)捷凄,默認(rèn)為 null)

拓展:年新用戶(hù)判定

select user_pin, ---用戶(hù)PIN
    pay_succ_time, --完成時(shí)間
    to_date(pay_succ_time) as dt
from
(
    select
    pay_succ_time, --完成時(shí)間
    user_pin, ---用戶(hù)PIN
    datediff(pay_succ_time,lag(pay_succ_time, 1, '1990-01-01 00:00:00') over(partition by user_pin order by pay_succ_time)) as dis_date
    from
    (
        select user_pin,pay_succ_time, --完成時(shí)間
            row_number() over(partition by trade_no order by pay_succ_time asc) as rn
        from db.table_nm
        where dt between date_sub('$TX_DATE', 730) and '$TX_DATE'
        and to_date(pay_succ_time) between date_sub('$TX_DATE', 730) and '$TX_DATE'
        and trim(nvl(user_pin,''))<>''
    )x
    where rn = 1
)t
where dis_date > 365

2凿叠、sum() over()俯逾、count() over()

-- 匯總每個(gè)用戶(hù)的交易額
sum(tx_amt) over(partition by user_pin))

-- 匯總每個(gè)用戶(hù)的訂單量
count(distinct ordr_num) over(partition by user_pin)

3、rank() over,dense_rank() over,row_number() over

rank() over:1 2 2 4
查出指定條件后的進(jìn)行排名匣吊。特點(diǎn)是儒拂,加入是對(duì)學(xué)生排名,使用這個(gè)函數(shù)色鸳,成績(jī)相同的兩名是并列社痛,下一位同學(xué)空出所占的名次。

select 
    name,subject,score
    ,rank() over(partition by subject order by score desc) rank
from student_score;
# output:1 2 2 4

dense_rank() over:1 2 2 3
與ran() over的區(qū)別是命雀,兩名學(xué)生的成績(jī)并列以后蒜哀,下一位同學(xué)并不空出所占的名次。

select 
    name,subject,score
    ,dense_rank() over(partition by subject order by score desc) rank
from student_score;
# output:1 2 2 3

row_number() over:1 2 3 4
這個(gè)函數(shù)不需要考慮是否并列吏砂,哪怕根據(jù)條件查詢(xún)出來(lái)的數(shù)值相同也會(huì)進(jìn)行連續(xù)排名

select 
    name,subject,score
    ,row_number() over(partition by subject order by score desc) rank
from student_score;
# output:1 2 3 4

使用rank() over的時(shí)候撵儿,空值是最大的,如果排序字段為null,可能造成null字段排在最前面狐血,影響排序結(jié)果淀歇。
可以這樣:rank() over(partition by course order by score desc nulls last)
來(lái)規(guī)避這個(gè)問(wèn)題。

select 
    name,subject,score
    ,rank() over(partition by subject order by score desc nulls last) rank
from student_score;

拓展:求連續(xù)最大天數(shù)

-- step1
use dev;
drop table dev.fin_user_fig_continue_hold;
create table dev.fin_user_fig_continue_hold as
select user_pin,count(flag) as continue_hold_cnt
from
(
    select
        user_pin
        ,(row_number() over(partition by user_pin order by dt)) - datediff(dt,start_date) as flag
    from dev.fin_user_fig_03
)t1
group by user_pin

-- step2
select
    count(case when max_continue_hold>=30 then user_pin end) as one_mth_pin_cnt
    ,count(case when max_continue_hold>=90 then user_pin end) as three_mth_pin_cnt
    ,count(case when max_continue_hold>=180 then user_pin end) as nine_mth_pin_cnt
    ,count(case when max_continue_hold>=360 then user_pin end) as one_year_pin_cnt
    ,(case when max_continue_hold>=30 then user_pin end)/count(user_pin) as one_mth_pin_rate
    ,count(case when max_continue_hold>=90 then user_pin end)/count(user_pin) as three_mth_pin_rate
    ,count(case when max_continue_hold>=180 then user_pin end)/count(user_pin) as nine_mth_pin_rate
    ,count(case when max_continue_hold>=360 then user_pin end)/count(user_pin) as one_year_pin_rate
from
(
    select user_pin,max(continue_hold_cnt) as max_continue_hold
    from dev.fin_user_fig_continue_hold
    group by user_pin
)t

拓展:求用戶(hù)首單便捷方法——利用named_struct

select
    pin as jd_pin
    ,struct1.orderid as jd_order_id
from
(
   select
        pin
        ,min(named_struct('consumerdate',consumerdate,'orderid',orderid)) as struct1
    from db.table_nm
    where dt='{TX_DATE}'
    group by pin
) m
group by pin,struct1.orderid
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載匈织,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者浪默。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缀匕,隨后出現(xiàn)的幾起案子纳决,更是在濱河造成了極大的恐慌,老刑警劉巖弦追,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岳链,死亡現(xiàn)場(chǎng)離奇詭異花竞,居然都是意外死亡劲件,警方通過(guò)查閱死者的電腦和手機(jī)倘核,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)墩弯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人正驻,你說(shuō)我怎么就攤上這事厌蔽∏@保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵奴饮,是天一觀的道長(zhǎng)纬向。 經(jīng)常有香客問(wèn)我择浊,道長(zhǎng),這世上最難降的妖魔是什么逾条? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任琢岩,我火速辦了婚禮,結(jié)果婚禮上师脂,老公的妹妹穿的比我還像新娘担孔。我一直安慰自己,他們只是感情好吃警,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布糕篇。 她就那樣靜靜地躺著,像睡著了一般酌心。 火紅的嫁衣襯著肌膚如雪拌消。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天谒府,我揣著相機(jī)與錄音拼坎,去河邊找鬼。 笑死完疫,一個(gè)胖子當(dāng)著我的面吹牛泰鸡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播壳鹤,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盛龄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了芳誓?” 一聲冷哼從身側(cè)響起余舶,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锹淌,沒(méi)想到半個(gè)月后匿值,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赂摆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年挟憔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烟号。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绊谭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汪拥,到底是詐尸還是另有隱情达传,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站宪赶,受9級(jí)特大地震影響宗弯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搂妻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一罕伯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叽讳,春花似錦追他、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至涤妒,卻和暖如春单雾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背她紫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工硅堆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贿讹。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓渐逃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親民褂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茄菊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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