日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pb9数据窗口中显示行数据与当前行区别_Hive的窗口函数

發布時間:2023/12/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pb9数据窗口中显示行数据与当前行区别_Hive的窗口函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聚合函數(如sum()、avg()、max()等等)是針對定義的行集(組)執行聚集,每組只返回一個值。

窗口函數也是針對定義的行集(組)執行聚集,可為每組返回多個值。如既要顯示聚集前的數據,又要顯示聚集后的數據。

窗口查詢有兩個步驟:將記錄分割成多個分區,然后在各個分區上調用窗口函數。

語法:主要是over( PARTITION BY (根據某條件分組,形成一個小組)….ORDER BY(再組內進行排序) …. )

over:

over (order by col1) --按照 col1 排序, 沒分區范圍就是整個表over (partition by col1) --按照 col1 分區 over (partition by col1 order by col2) -- 按照 col1 分區,按照 col2 排序--帶有窗口范圍over (partition by col1 order by col2 ROWS 窗口范圍) -- 在窗口范圍內,按照 col1 分區,按照 col2 排序

實例:

-- 按照age排序,每階段的age數據進行統計求和

select id,age,name, count() over(order by age) from wt1;

結果:

-- 窗口范圍是表下按照age進行分區

-- 在分區里面,再按照age進行排序

select id,age,name, count() over(partition by age order by age) from wt1;

-- 窗口范圍是表下按照age進行分區

-- 在分區里面,再按照id進行降序排序

select id,age,name, count() over(partition by age order by age) from wt1;

序列函數

row_number:會對所有數值,輸出不同的序號,序號唯一且連續,如:1、2、3、4、5。

rank:會對相同數值,輸出相同的序號,而且下一個序號間斷,如:1、1、3、3、5。

dense_rank:會對相同數值,輸出相同的序號,但下一個序號不間斷,如:1、1、2、2、3。

ROW_NUMBER()

row_number() OVER (PARTITION BY COL1 ORDER BY COL2)

表示根據COL1分組,在分組內部根據 COL2排序,而此函數計算的值就表示每組內部排序后的順序編號(組內連續的唯一的)。

表數據:

-- rn_id 按照性別分組,按照id排序

select id,sex,name, row_number() over(partition by sex order by id desc) from student;

--查詢student表中按照sex分組,取每組的最小id的記錄

select a.* from (select sex,age,id, row_number() over(partition by sex order by id) as rn from student) a where a.rn = 1;

over中partition by和distribute by區別:

1)partition by [key..] order by [key..]只能在窗口函數中使用,而distribute by [key...] sort by [key...]在窗口函數和select中都可以使用。

2)窗口函數中兩者是沒有區別的

3)where后面不能用partition by

Window 函數:

ROWS窗口函數中的行選擇器 rows between [n|unbounded preceding]|[n|unbounded following]|[current row] and [n|unbounded preceding]|[n|unbounded following]|[current row]

參數解釋:

n行數

unbounded不限行數

preceding在前N行

following在后N行

current row當前行

應用場景:

1)查詢當月銷售額和近三個月的銷售額

2)查詢當月銷售額和今年年初到當月的銷售額

表數據:

實例:

-- 查詢當月銷售額和近三個月的銷售額

SELECT y, m, sales, sum(sales) OVER(PARTITION BY y ROWS between unbounded preceding and current row) AS s2 FROM sale_table;

總結

以上是生活随笔為你收集整理的pb9数据窗口中显示行数据与当前行区别_Hive的窗口函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。