GBase與梧桐數(shù)據(jù)庫(kù)窗口函數(shù)使用的方法比較
一、前言
窗口函數(shù)可以進(jìn)行復(fù)雜的數(shù)據(jù)分析,使數(shù)據(jù)處理變得更加靈活和強(qiáng)大。通過(guò)這些函數(shù),用戶可以在不同的窗口范圍內(nèi)對(duì)數(shù)據(jù)進(jìn)行匯總、平均、計(jì)數(shù)等操作,以下介紹一些常用的窗口函數(shù)分別在梧桐數(shù)據(jù)庫(kù)和GBase數(shù)據(jù)庫(kù)中的使用。
二、創(chuàng)建測(cè)試用例
為更好的體現(xiàn)函數(shù)的使用,現(xiàn)創(chuàng)建一個(gè)測(cè)試表來(lái)驗(yàn)證各類窗口函數(shù)的使用及返回結(jié)果;
1、建表
-- gbase數(shù)據(jù)庫(kù)建表create table rows_test ( user_id varchar(10), --用戶idprod_id varchar(10), --產(chǎn)品idsale_cnt decimal(10,0) --銷(xiāo)售數(shù)量);-- 梧桐數(shù)據(jù)庫(kù)建表create table rows_test ( user_id character varying(10), --用戶idprod_id character varying(10), --產(chǎn)品idsale_cnt numeric(10,0) --銷(xiāo)售數(shù)量);
2、測(cè)試用例
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ù)庫(kù)與GBase數(shù)據(jù)插入語(yǔ)法相同
三、排序類窗口函數(shù)
1、簡(jiǎn)介
排序類窗口函數(shù)常用的有 row_number()、rank()、dense_rank();
row_number():為每個(gè)行分配一個(gè)唯一的連續(xù)整數(shù),從1開(kāi)始。它不會(huì)為任何行跳過(guò)數(shù)字,即使有并列(ties)也不會(huì)跳過(guò);
rank() :在遇到并列時(shí)會(huì)為相同的值分配相同的排名,并且后續(xù)的排名會(huì)跳過(guò)已使用的數(shù)字。例如,如果有兩行并列第一,它們的排名都是1,下一行的排名會(huì)是3,而不是2;
dense_rank():在處理并列時(shí)會(huì)為相同的值分配相同的排名,并且下一個(gè)排名會(huì)緊接著上一個(gè)排名,即使有并列也不會(huì)跳過(guò)數(shù)字;
2、函數(shù)使用
以產(chǎn)品 ‘prod_1’ 的銷(xiāo)售數(shù)量對(duì)用戶進(jìn)行排名,分別使用上述函數(shù)實(shí)現(xiàn):
梧桐數(shù)據(jù)庫(kù)與GBase數(shù)據(jù)庫(kù)語(yǔ)法相同,不做重復(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ù)庫(kù)執(zhí)行結(jié)果
GBase 執(zhí)行結(jié)果
over
子句用來(lái)定義窗口的分區(qū)及排序方式partition by
定義排序分區(qū)order by
定義排序方式
如上結(jié)果:
row_number()
會(huì)為每一行賦予一個(gè)整數(shù)不會(huì)跳過(guò),當(dāng)排序條件相同時(shí),會(huì)隨機(jī)一行排序;
rank()
在排序條件相同時(shí)會(huì)賦予相同的值,下一個(gè)值會(huì)跳過(guò);
dense_rank()
在排序條件相同時(shí)會(huì)賦予相同的值,下一個(gè)值會(huì)接上一個(gè);
四、統(tǒng)計(jì)類窗口函數(shù)
統(tǒng)計(jì)類窗口函數(shù)常用的有 count()、sum()、avg()、max()、min() 等,其效果與聚合函數(shù)相同,具體如下:
sum(column_1)
:對(duì)column_1
字段求和,字段必須是整型或浮點(diǎn)型;count(column_1)
:對(duì)column_1
字段計(jì)數(shù);avg(column_1)
:對(duì)column_1
字段求平均值,字段必須是整型或浮點(diǎn)型;max(column_1)
:對(duì)column_1
字段求最大值,字段是整型或浮點(diǎn)型,也可是字符串;min(column_1)
:對(duì)column_1
字段求最小值,字段是整型或浮點(diǎn)型,也可是字符串;
示例:
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ū)計(jì)算銷(xiāo)量的和,返回值為用戶所有產(chǎn)品銷(xiāo)量的和;count(prod_id) over (partition by user_id)
以用戶id為分區(qū)計(jì)算銷(xiāo)售產(chǎn)品數(shù)量,返回值為用戶銷(xiāo)售的產(chǎn)品個(gè)數(shù);avg(sale_cnt) over (partition by user_id)
以用戶id為分區(qū)計(jì)算銷(xiāo)售產(chǎn)品銷(xiāo)量的平均值,返回值為用戶平均每個(gè)產(chǎn)品的銷(xiāo)量;max(sale_cnt) over (partition by user_id)
以用戶id為分區(qū)計(jì)算產(chǎn)品最大銷(xiāo)量,返回值為用戶銷(xiāo)售最多的產(chǎn)品個(gè)數(shù);min(sale_cnt) over (partition by user_id)
以用戶id為分區(qū)計(jì)算銷(xiāo)售產(chǎn)品數(shù)量,返回值為用戶銷(xiāo)售最少的產(chǎn)品個(gè)數(shù);
梧桐數(shù)據(jù)庫(kù)測(cè)試結(jié)果如圖:
五、總結(jié)
對(duì)比梧桐數(shù)據(jù)庫(kù)與GBase數(shù)據(jù)窗口函數(shù)的語(yǔ)法及使用基本相同,其避免了使用子查詢或連接,可以顯著提高查詢性能;提供了對(duì)數(shù)據(jù)進(jìn)行靈活分析的能力,可以輕松適應(yīng)不同的數(shù)據(jù)分析需求,增強(qiáng)了數(shù)據(jù)的分析能力;
窗口函數(shù)的應(yīng)用場(chǎng)景也非常廣泛,可以用于各種數(shù)據(jù)分析和處理任務(wù);例如通過(guò)排序類函數(shù)可以計(jì)算套餐銷(xiāo)量top;地市、區(qū)縣業(yè)務(wù)發(fā)展情況的top等;匯總、累計(jì)類函數(shù)可以統(tǒng)計(jì)用戶出賬等收入分析。
到此這篇關(guān)于GBase與梧桐數(shù)據(jù)庫(kù)窗口函數(shù)使用的方法比較的文章就介紹到這了,更多相關(guān)GBase與梧桐數(shù)據(jù)庫(kù)窗口函數(shù)使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用navicat連接虛擬機(jī)的數(shù)據(jù)庫(kù)進(jìn)行操作詳細(xì)流程
這篇文章主要給大家介紹了關(guān)于使用navicat連接虛擬機(jī)的數(shù)據(jù)庫(kù)進(jìn)行操作詳細(xì)流程,使用Navicat連接虛擬機(jī)的數(shù)據(jù)庫(kù),需要確保虛擬機(jī)和數(shù)據(jù)庫(kù)運(yùn)行狀態(tài),獲取數(shù)據(jù)庫(kù)信息,包括類型、IP地址、端口號(hào)、用戶名和密碼,需要的朋友可以參考下2024-11-11達(dá)夢(mèng)數(shù)據(jù)庫(kù)DISQL連接數(shù)據(jù)庫(kù)與執(zhí)行SQL、腳本的方法圖文詳解
DIsql是DM數(shù)據(jù)庫(kù)的一個(gè)命令行客戶端工具,跟Oracle數(shù)據(jù)庫(kù)的sqlplus工具一樣,用來(lái)與?DM?數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行交互,這篇文章主要給大家介紹了關(guān)于達(dá)夢(mèng)數(shù)據(jù)庫(kù)DISQL連接數(shù)據(jù)庫(kù)與執(zhí)行SQL、腳本的方法,需要的朋友可以參考下2024-09-09詳解Navicat Premium 15 無(wú)限試用腳本的方法
這篇文章主要介紹了Navicat Premium 15 無(wú)限試用腳本的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-11-11數(shù)據(jù)庫(kù)設(shè)計(jì)的完整性約束表現(xiàn)在哪些方面
數(shù)據(jù)完整性是指數(shù)據(jù)的正確性、完備性和一致性,是衡量數(shù)據(jù)庫(kù)質(zhì)量好壞的規(guī)范。數(shù)據(jù)庫(kù)完整性由各式各樣的完整性約束來(lái)確保,因而可以說(shuō)數(shù)據(jù)庫(kù)完整性規(guī)劃即是數(shù)據(jù)庫(kù)完整性約束的規(guī)劃。那么,數(shù)據(jù)庫(kù)設(shè)計(jì)的完整性約束表現(xiàn)哪些方面?2015-10-10舉例簡(jiǎn)單介紹PostgreSQL中的數(shù)組
這篇文章主要介紹了舉例簡(jiǎn)單介紹PostgreSQL中的數(shù)組,PostgreSQL是一個(gè)高性能關(guān)系型數(shù)據(jù)庫(kù),學(xué)習(xí)PostgreSQL將成為趨勢(shì),需要的朋友可以參考下2015-04-045分鐘快速了解數(shù)據(jù)庫(kù)死鎖產(chǎn)生的場(chǎng)景和解決方法
這篇文章主要給大家介紹了關(guān)于如何通過(guò)5分鐘快速理解數(shù)據(jù)庫(kù)死鎖的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05聊聊Navicat統(tǒng)計(jì)的行數(shù)竟然和表實(shí)際行數(shù)不一致的問(wèn)題
Navicat作為數(shù)據(jù)庫(kù)管理工具,在業(yè)界廣受歡迎,這篇文章主要介紹了Navicat統(tǒng)計(jì)的行數(shù)竟然和表實(shí)際行數(shù)不一致的問(wèn)題,需要的朋友可以參考下2021-12-12Navicat快速導(dǎo)入和導(dǎo)出sql文件的方法
Navicat是MySQL非常好用的可視化管理工具,功能非常強(qiáng)大,能滿足我們?nèi)粘?shù)據(jù)庫(kù)開(kāi)發(fā)的所有需求。今天教大家如何導(dǎo)入和導(dǎo)出SQL文件,感興趣的朋友跟隨小編一起看看吧2021-05-05IndexedDB瀏覽器內(nèi)建數(shù)據(jù)庫(kù)并行更新問(wèn)題詳解
這篇文章主要為大家介紹了IndexedDB瀏覽器內(nèi)建數(shù)據(jù)庫(kù)并行更新問(wèn)題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12