




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1. connect by 用法總結(jié)2一、樹查詢(遞歸查詢)2二、列轉(zhuǎn)行sys_connect_by_path()42.分析函數(shù)總結(jié)61.分析函數(shù)(OVER)72.分析函數(shù)2(Rank, Dense_rank, row_number)93.分析函數(shù)3(Top/Bottom N、First/Last、NTile)94.窗口函數(shù)115.報表函數(shù)14151. connect by 用法總結(jié)一、樹查詢(遞歸查詢)1. 作用對于oracle進行簡單樹查詢(遞歸查詢)列轉(zhuǎn)行2.基本語法select . from where :過濾條件,用于對返回的所有記錄進行過濾。start with :查詢結(jié)果重起始根結(jié)點的限定條件。connect by ; :連接條件1)例子:select num1,num2from tablestart with num2 = 1008connect by num2 = prior num1;2)解釋:start with:用來標識哪個節(jié)點作為查找樹型結(jié)構(gòu)的根節(jié)點。若該子句被省略,則表示所有滿足查詢條件的行作為根節(jié)點。prior: 位置很重要(自我總結(jié),和父在一起 則自底向上,即查父 和子在一起 則自頂向下 查子)例子原始數(shù)據(jù) num1 為父 num2 為子看下面的圖 1. CONNECT_BY_ROOT 返回當前節(jié)點的最頂端節(jié)點。2. CONNECT_BY_ISLEAF 判斷是否為葉子節(jié)點,是1,不是0。3. LEVEL 偽列表示節(jié)點深度。4. SYS_CONNECT_BY_PATH函數(shù)顯示詳細路徑,并用“/”分隔。二、列轉(zhuǎn)行sys_connect_by_path()這個函數(shù)使用之前必須先建立一個樹,否則無用sys_connect_by_path(字段名, 2個字段之間的連接符號)withtmp_a as (select 1 a,0 p from dualunion allselect 2,1 from dualunion allselect 3,1 from dualunion allselect 4,3 from dualunion allselect 5,2 from dualunion allselect 6,5 from dual)- 子全部顯示 根-子 level代表級別select a,p,sys_connect_by_path(a,-),level from tmp_astart with a = 1connect by p = prior a- 2和2的所有下級去掉 根-子 (開始就要去掉)select a,p,sys_connect_by_path(a,-) from tmp_astart with p = 1 and a 2connect by p = prior a- 2的所有下級都去掉 根-子 (connect 時去掉)select a,p,sys_connect_by_path(a,-) from tmp_astart with a = 1connect by p = prior a and p 2 -去掉2的分枝- 2的下一級去掉 根-子 (where 中去掉)select a,p,sys_connect_by_path(a,-) from tmp_awhere p 2 start with a = 1connect by p = prior a-顯示最長的 根-子withtmp_tab as (select 中國 s,null b from dualunion allselect 廣東 s,中國 b from dualunion allselect 湖南 s,中國 b from dualunion allselect 衡陽 s,湖南 b from dualunion allselect 廣州 s,廣東 b from dualunion allselect 衡東 s,衡陽 b from dual)select max(sys_connect_by_path(s,/) from tmp_tabstart with s = 湖南connect by prior s = b 2.分析函數(shù)總結(jié)一、統(tǒng)計方面:Sum( )Over(Partitionby Orderby )Sum( )Over(Partitionby Orderby RowsBetween PrecedingAnd Following)Sum( )Over(Partitionby Orderby RowsBetween PrecedingAndCurrentRow)Sum( )Over(Partitionby Orderby RangeBetweenInterval DayPrecedingAndInterval DayFollowing)二、排列方面:Rank()Over(Partitionby Orderby NullsFirst/Last)Dense_rank()Over(Patitionby Orderby NullsFirst/Last)Row_number()Over(Partitionby Orderby NullsFirst/Last)Ntile( )Over(Partitionby Orderby )三、最大值/最小值查找方面:Min( )/Max( )Keep(Dense_rankFirst/LastPartitionby Orderby )四、首記錄/末記錄查找方面:First_value/Last_value(Sum( )Over(Patitionby Orderby RowsBetween PrecedingAnd Following)五、相鄰記錄之間比較方面:Lag(Sum( ),1)Over(Patitionby Orderby )1.分析函數(shù)(OVER)一.分析函數(shù)語法:FUNCTION_NAME(,.)OVER()例:sum(sal) over (partition by deptno order by ename) new_aliassum:函數(shù)名(sal):參數(shù) 03個參數(shù) 可以是表達式Over:關(guān)鍵字partition by :(可選)分區(qū)order by :(可選)LAG和LEAD 需,AVG不需要,如果使用排序的開窗函數(shù)時,必須加 1)FUNCTION子句 26個分析函數(shù),按功能分5類分析函數(shù)分類1.等級(ranking)函數(shù): 用于尋找前N種查詢2.開窗(windowing)函數(shù):用于計算不同的累計,如SUM,COUNT,AVG,MIN,MAX等,作用于數(shù)據(jù)的一個窗口上3.制表(reporting)函數(shù):與開窗函數(shù)同名,作用于一個分區(qū)或一組上的所有列(制表與開窗的區(qū)別:制表的OVER語句上少一個ORDER BY子句)4.LAG,LEAD函數(shù): 可在結(jié)果集中向前或向后檢索值,為了避免數(shù)據(jù)的自連接,它們是非常用用的.5.VAR_POP,VAR_SAMP,STDEV_POPE及線性的衰減函數(shù):計算任何未排序分區(qū)的統(tǒng)計值2)PARTITION子句分組3)ORDER BY子句分析函數(shù)中ORDERBY的存在將添加一個默認的開窗子句,這意味著計算中所使用的行的集合是當前分區(qū)中當前行和前面所有行,沒有ORDER BY時,默認的窗口是全部的分區(qū)。在Order by子句后可以添加nulls last,如:order by comm desc nulls last表示排序時忽略comm列為空的行.二、分析函數(shù)簡單實例:按區(qū)域查找2001年度訂單總額占區(qū)域訂單總額20%以上的客戶【1】測試數(shù)據(jù):SQLselect*fromorders_tmp;CUST_NBRREGION_IDSALESPERSON_IDYEARMONTHTOT_ORDERSTOT_SALES-11711 200172122044542001102378027672001233750106820011221691106720012342624【2】測試語句:SQLselecto.cust_nbrcustomer,2o.region_idregion,3sum(o.tot_sales)cust_sales,4sum(sum(o.tot_sales)over(partitionbyo.region_id)region_sales5fromorders_tmpo6whereo.year=20017groupbyo.region_id,o.cust_nbr;CUSTOMERREGIONCUST_SALESREGION_SALES-45378023780276375068065106643156806511712204122043、 分析函數(shù)OVER解析:請注意上面的綠色高亮部分,group by的意圖很明顯:將數(shù)據(jù)按區(qū)域ID,客戶進行分組。假如我們只需要統(tǒng)計每個區(qū)域每個客戶的訂單總額,那么我們只需要group by o.region_id,o.cust_nbr就夠了。但我們還想在每一行顯示該客戶所在區(qū)域的訂單總額,這一點和前面的不同:需要在前面分組的基礎上按區(qū)域累加。group by和sum是無法做到這一點的(因為聚集操作的級別不一樣,前者是對一個客戶,后者是對一批客戶)。這就是over函數(shù)的作用了!它的作用是告訴SQL引擎:按區(qū)域?qū)?shù)據(jù)進行分區(qū),然后累積每個區(qū)域每個客戶的訂單總額(sum(sum(o.tot_sales)。最終語句SQLselectall_sales.*,2100*round(cust_sales/region_sales,2)|%Percent3from(selecto.cust_nbrcustomer,4o.region_idregion,5sum(o.tot_sales)cust_sales,6sum(sum(o.tot_sales)over(partitionbyo.region_id)region_sales7fromorders_tmpo8whereo.year=20019groupbyo.region_id,o.cust_nbr)all_sales10whereall_sales.cust_salesall_sales.region_sales*0.2;CUSTOMERREGIONCUST_SALESREGION_SALESPERCENT-453780237802100%106643156806594%1171220412204100%2.分析函數(shù)2(Rank, Dense_rank, row_number)遇到相同的數(shù)據(jù)時用Rank, Dense_rank, row_number排名策略,他們之間的區(qū)別 直接看例子SQLselectregion_id,customer_id,sum(customer_sales)total,2rank()over(orderbysum(customer_sales)desc)rank,3dense_rank()over(orderbysum(customer_sales)desc)dense_rank,4row_number()over(orderbysum(customer_sales)desc)row_number5fromuser_order6groupbyregion_id,customer_id;REGION_IDCUSTOMER_IDTOTALRANKDENSE_RANKROW_NUMBER- 818125384011111152122499212121292312249921212139241224992121214103012168581513 153.分析函數(shù)3(Top/Bottom N、First/Last、NTile)一、Top/Bottom N查詢:找出所有訂單總額排名前3的大客戶:SQLselect*SQLfrom(selectregion_id,SQLcustomer_id,SQLsum(customer_sales)cust_total,SQLrank()over(orderbysum(customer_sales)descNULLSLAST)rankSQLfromuser_orderSQLgroupbyregion_id,customer_id)SQLwhererankselectmin(customer_id)2keep(dense_rankfirstorderbysum(customer_sales)desc)first,3min(customer_id)4keep(dense_ranklastorderbysum(customer_sales)desc)last5fromuser_order6groupbycustomer_id;FIRSTLAST-311Min:函數(shù)的作用是用于當存在多個First/Last情況下保證返回唯一的記錄。(去掉會出錯)Keep:從上面的結(jié)果我們已經(jīng)知道Oracle對排名的結(jié)果只“保留”2條數(shù)據(jù),這就是keep的作用。告訴Oracle只保留符合keep條件的記錄。dense_rank:是告訴Oracle排列的策略,first/last則告訴最終篩選的條件。三、按層次查詢(NTile)找出訂單總額排名前1/5的客戶。SQLselectregion_id,2customer_id,3ntile(5)over(orderbysum(customer_sales)desc)til4fromuser_order5groupbyregion_id,customer_id;REGION_IDCUSTOMER_IDTILE-10311925110261661818252292336937113534684816467510295515Ntil函數(shù)為各個記錄在記錄集中的排名計算比例,所有的記錄分成5個等級,假如只需要前1/5的記錄則只需要截取TILE的值為1的記錄就可以了。假如需要排名前25%的記錄(也就是1/4)那么我們只需要設置ntile(4)就可以了。4.窗口函數(shù)需要隨著遍歷記錄集的每一條記錄的同時進行統(tǒng)計。也即是說:統(tǒng)計不止發(fā)生一次,而是發(fā)生多次。統(tǒng)計不至發(fā)生在記錄集形成后,而是發(fā)生在記錄集形成的過程中。一、窗口函數(shù)示例全統(tǒng)計:需求:列出每月的訂單總額以及全年的訂單總額rows between . preceding and . following。SQLselectmonth,2sum(tot_sales)month_sales,3sum(sum(tot_sales)over(orderbymonth4rowsbetweenunboundedprecedingandunboundedfollowing)total_sales5fromorders6groupbymonth;MONTHMONTH_SALESTOTAL_SALES-161069763077662428676630776636370316307766454114663077665592935630776665014856307766 .(后面的剩了)unbounded preceding and unbouned following:針對當前所有記錄的前一條、后一條記錄,也就是表中的所有記錄。Preceding前面如果是1,不是從第1條記錄開始的意思,而是指當前記錄的前一條記錄。preceding前面的修飾符是告訴窗口函數(shù)執(zhí)行時參考的記錄數(shù),如同unbounded就是告訴oracle不管當前記錄是第幾條,只要前面有多少條記錄,都列入統(tǒng)計的范圍。二、窗口函數(shù)進階滾動統(tǒng)計(累積/均值):需求:列出每月的訂單總額以及截至到當前月的訂單總額。也就是說3月份要顯示當月的訂單總額和1,2,3月份訂單總額的和,依此類推。需要在統(tǒng)計第N月的訂單總額時,還要再統(tǒng)計這N個月來的訂單總額之和。curreent rowSQLselectmonth,2sum(tot_sales)month_sales,3sum(sum(tot_sales)over(orderbymonth4rowsbetweenunboundedprecedingandcurrentrow)current_total_sales5fromorders6groupbymonth;MONTHMONTH_SALESCURRENT_TOTAL_SALES-16106976106972428676103937336370311676404三、窗口函數(shù)進階根據(jù)時間范圍統(tǒng)計統(tǒng)計了當天銷售額和五天內(nèi)的評價銷售額:selecttrunc(order_dt)day,sum(sale_price)daily_sales,avg(sum(sale_price)over(orderbytrunc(order_dt)rangebetweeninterval2dayprecedingandinterval2dayfollowing)five_day_avgfromcust_orderwheresale_priceisnotnullandorder_dtbetweento_date(01-jul-2001,dd-mon-yyyy)andto_date(31-jul-2001,dd-mon-yyyy)為了對指定范圍進行統(tǒng)計,Oracle使用關(guān)鍵字range、interval來指定一個范圍。上面的例子告訴Oracle查找當前日期的前2天,后2天范圍內(nèi)的記錄,并統(tǒng)計其銷售平均值。四、窗口函數(shù)進階first_value/last_value:first_value、last_value,用于在窗口記錄集中查找第一條記錄和最后一條記錄。需要顯示當前月、上一個月、后一個月的銷售情況,以及每3個月的銷售平均值selectmonth,first_value(sum(tot_sales)over(orderbymonthrowsbetween1precedingand1following)prev_month,sum(tot_sales)monthly_sales,last_value(sum(tot_sales)over(orderbymonthrowsbetween1precedingand1following)next_month,avg(sum(tot_sales)over(orderbymonthrowsbetween1precedingand1following)rolling_avgfromorderswhereyear=2001andregion_id=6groupbymonthorderbymonth;rows between 1 preceding and 1 following:當前記錄的前一條、后一條范圍內(nèi)查找并統(tǒng)計,而first_value和last_value在這3條記錄中至分別找出第一條、第三條記錄五、窗口函數(shù)進階比較相鄰記錄:我們想每次顯示當月的銷售額和上個月的銷售額,leg函數(shù)類似于preceding和following子句,它能夠通過和當前記錄的相對位置而被應用,在比較同一個相鄰的記錄集內(nèi)兩條相鄰記錄的時候特別有用。selectmonth,sum(tot_sales)monthly_sales,lag(sum(tot_sales),1)over(orderbymonth)prev_month_salesfromorderswhereyear=2001andregion_id=6groupbymonthorderbymonth;5.報表函數(shù)一、報表函數(shù)簡介sum(sum(tot_sales)over(orderbymonthrowsbetweenunboundedprecedingandunboundedfollowing)來統(tǒng)計全年的訂單總額,這個函數(shù)會在記錄集形成的過程中,每檢索一條記錄就執(zhí)行一次,它總共執(zhí)行了12次。這是非常費時的。實際上我們還有更簡便的方法:SQLselectmonth,2sum(tot_sales)month_sales,3sum(sum(tot_sales)over(orderbymonth4rowsbetweenunboundedprecedingandunboundedfollowing)win_sales,5sum(sum
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)藥生物活性物質(zhì)降解動力學模型建立考核試卷
- 2025-2030埃莫菌素行業(yè)市場現(xiàn)狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 2025-2030全球及中國面食制造商行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025-2030全球及中國通話追蹤系統(tǒng)行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025-2030全球及中國資本計劃管理軟件行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025-2030全球及中國水質(zhì)監(jiān)測行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025-2030全球及中國情感治療機器人行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025年X世代消費行為與支出趨勢研究報告(英文版)
- 杭州砂石骨料生產(chǎn)線建設項目可行性研究報告
- 八年級上冊數(shù)學課題研究教學計劃
- 2025年1月國家開放大學法學本科《中國法律史》期末紙質(zhì)考試試題及答案
- 初中地理跨學科主題學習設計與實施
- 2021衛(wèi)生監(jiān)督法律法規(guī)知識競賽題庫及答案
- 懲罰游戲?qū)W校班會公司早會小游戲晨會年會團建課堂娛樂互動340
- 中國郵政集團有限公司國企招聘筆試真題2024
- 電腦供貨方案、售后服務方案
- 姜黃素項目投資可行性研究報告
- 2025年云南省康旅控股集團有限公司招聘筆試參考題庫含答案解析
- 八年級數(shù)學下冊 第二學期 期末綜合測試卷(湘教版 2025年春)(二)
- 集團內(nèi)訓師管理辦法
- 數(shù)據(jù)資產(chǎn):會計研究的新領(lǐng)域
評論
0/150
提交評論