GBase與梧桐數(shù)據(jù)庫窗口函數(shù)使用的方法比較
一、前言
窗口函數(shù)可以進行復(fù)雜的數(shù)據(jù)分析,使數(shù)據(jù)處理變得更加靈活和強大。通過這些函數(shù),用戶可以在不同的窗口范圍內(nèi)對數(shù)據(jù)進行匯總、平均、計數(shù)等操作,以下介紹一些常用的窗口函數(shù)分別在梧桐數(shù)據(jù)庫和GBase數(shù)據(jù)庫中的使用。
二、創(chuàng)建測試用例
為更好的體現(xiàn)函數(shù)的使用,現(xiàn)創(chuàng)建一個測試表來驗證各類窗口函數(shù)的使用及返回結(jié)果;
1、建表
-- gbase數(shù)據(jù)庫建表create table rows_test ( user_id varchar(10), --用戶idprod_id varchar(10), --產(chǎn)品idsale_cnt decimal(10,0) --銷售數(shù)量);-- 梧桐數(shù)據(jù)庫建表create table rows_test ( user_id character varying(10), --用戶idprod_id character varying(10), --產(chǎn)品idsale_cnt numeric(10,0) --銷售數(shù)量);
2、測試用例
insert into rows_test values('AAA','pd_1',2),
('AAA','pd_2',5),
('BBB','pd_1',1),
('BBB','pd_2',2),
('BBB','pd_3',3),
('CCC','pd_1',3),
('CCC','pd_3',4),
('DDD','pd_1',2),
('DDD','pd_3',4);--梧桐數(shù)據(jù)庫與GBase數(shù)據(jù)插入語法相同三、排序類窗口函數(shù)
1、簡介
排序類窗口函數(shù)常用的有 row_number()、rank()、dense_rank();
row_number():為每個行分配一個唯一的連續(xù)整數(shù),從1開始。它不會為任何行跳過數(shù)字,即使有并列(ties)也不會跳過;
rank() :在遇到并列時會為相同的值分配相同的排名,并且后續(xù)的排名會跳過已使用的數(shù)字。例如,如果有兩行并列第一,它們的排名都是1,下一行的排名會是3,而不是2;
dense_rank():在處理并列時會為相同的值分配相同的排名,并且下一個排名會緊接著上一個排名,即使有并列也不會跳過數(shù)字;
2、函數(shù)使用
以產(chǎn)品 ‘prod_1’ 的銷售數(shù)量對用戶進行排名,分別使用上述函數(shù)實現(xiàn):
梧桐數(shù)據(jù)庫與GBase數(shù)據(jù)庫語法相同,不做重復(fù)贅述
select *,row_number() over(partition by prod_id order by sale_cnt desc) row_id from rows_test ;select *,rank() over(partition by prod_id order by sale_cnt desc) rank_id from rows_test ;select *,dense_rank() over(partition by prod_id order by sale_cnt desc) dense_rank_id from rows_test ;
梧桐數(shù)據(jù)庫執(zhí)行結(jié)果



GBase 執(zhí)行結(jié)果

over子句用來定義窗口的分區(qū)及排序方式partition by定義排序分區(qū)order by定義排序方式
如上結(jié)果:
row_number() 會為每一行賦予一個整數(shù)不會跳過,當排序條件相同時,會隨機一行排序;
rank()在排序條件相同時會賦予相同的值,下一個值會跳過;
dense_rank()在排序條件相同時會賦予相同的值,下一個值會接上一個;
四、統(tǒng)計類窗口函數(shù)
統(tǒng)計類窗口函數(shù)常用的有 count()、sum()、avg()、max()、min() 等,其效果與聚合函數(shù)相同,具體如下:
sum(column_1):對column_1字段求和,字段必須是整型或浮點型;count(column_1):對column_1字段計數(shù);avg(column_1):對column_1字段求平均值,字段必須是整型或浮點型;max(column_1):對column_1字段求最大值,字段是整型或浮點型,也可是字符串;min(column_1):對column_1字段求最小值,字段是整型或浮點型,也可是字符串;
示例:
select *,sum(sale_cnt) over (partition by user_id),count(prod_id) over (partition by user_id),avg(sale_cnt) over (partition by user_id),max(sale_cnt) over (partition by user_id),min(sale_cnt) over (partition by user_id)from rows_test
示例解釋:
sum(sale_cnt) over (partition by user_id)以用戶id為分區(qū)計算銷量的和,返回值為用戶所有產(chǎn)品銷量的和;count(prod_id) over (partition by user_id)以用戶id為分區(qū)計算銷售產(chǎn)品數(shù)量,返回值為用戶銷售的產(chǎn)品個數(shù);avg(sale_cnt) over (partition by user_id)以用戶id為分區(qū)計算銷售產(chǎn)品銷量的平均值,返回值為用戶平均每個產(chǎn)品的銷量;max(sale_cnt) over (partition by user_id)以用戶id為分區(qū)計算產(chǎn)品最大銷量,返回值為用戶銷售最多的產(chǎn)品個數(shù);min(sale_cnt) over (partition by user_id)以用戶id為分區(qū)計算銷售產(chǎn)品數(shù)量,返回值為用戶銷售最少的產(chǎn)品個數(shù);
梧桐數(shù)據(jù)庫測試結(jié)果如圖:



五、總結(jié)
對比梧桐數(shù)據(jù)庫與GBase數(shù)據(jù)窗口函數(shù)的語法及使用基本相同,其避免了使用子查詢或連接,可以顯著提高查詢性能;提供了對數(shù)據(jù)進行靈活分析的能力,可以輕松適應(yīng)不同的數(shù)據(jù)分析需求,增強了數(shù)據(jù)的分析能力;
窗口函數(shù)的應(yīng)用場景也非常廣泛,可以用于各種數(shù)據(jù)分析和處理任務(wù);例如通過排序類函數(shù)可以計算套餐銷量top;地市、區(qū)縣業(yè)務(wù)發(fā)展情況的top等;匯總、累計類函數(shù)可以統(tǒng)計用戶出賬等收入分析。
到此這篇關(guān)于GBase與梧桐數(shù)據(jù)庫窗口函數(shù)使用的方法比較的文章就介紹到這了,更多相關(guān)GBase與梧桐數(shù)據(jù)庫窗口函數(shù)使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
時序數(shù)據(jù)庫VictoriaMetrics源碼解析之寫入與索引
這篇文章主要為大家介紹了VictoriaMetrics時序數(shù)據(jù)庫的寫入與索引源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
關(guān)于Rsa Public Key not Find的問題及解決
這篇文章主要介紹了關(guān)于Rsa Public Key not Find的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
最新Navicat?16??Mac版安裝永久激活教程(親測有效)
這篇文章主要介紹了最新Navicat?16??Mac版安裝永久激活教程(親測有效),本文通過圖文并茂的形式給大家介紹的非常詳細,對Navicat?16?永久激活教程感興趣的朋友一起看看吧2022-08-08
dbeaver導(dǎo)入導(dǎo)出數(shù)據(jù)庫簡單圖文教程
DBeaver是一款適用于開發(fā)人員、數(shù)據(jù)庫管理員和分析師的多平臺、多數(shù)據(jù)庫管理工具,這篇文章主要給大家介紹了關(guān)于dbeaver導(dǎo)入導(dǎo)出數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2024-01-01
解決MongoVUE的Collections數(shù)據(jù)不顯示的問題
這篇文章主要介紹了MongoVUE的Collections數(shù)據(jù)不顯示的解決方法 ,需要的朋友可以參考下2017-05-05

