資源描述:
《oracle connect by 和 分析函數(shù)總結(jié)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、1.connectby用法總結(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/BottomN、First/Last、NTile)94.窗口函數(shù)115.報表函數(shù)141.151.connectby用法總結(jié)一、樹查詢(遞歸查詢)1.作用對于oracle進(jìn)行簡單樹查詢(遞歸查詢)列轉(zhuǎn)行2.基本語法select...from?wh
2、ere:過濾條件,用于對返回的所有記錄進(jìn)行過濾。startwith:查詢結(jié)果重起始根結(jié)點(diǎn)的限定條件。connectby;:連接條件1)例子:selectnum1,num2?fromtablestartwithnum2=1008?connectby?num2=priornum1?;2)解釋:startwith:用來標(biāo)識哪個節(jié)點(diǎn)作為查找樹
3、型結(jié)構(gòu)的根節(jié)點(diǎn)。若該子句被省略,則表示所有滿足查詢條件的行作為根節(jié)點(diǎn)。prior:位置很重要(自我總結(jié),和父在一起則自底向上,即查父和子在一起則自頂向下查子)例子原始數(shù)據(jù)num1為父num2為子15看下面的圖1.CONNECT_BY_ROOT返回當(dāng)前節(jié)點(diǎn)的最頂端節(jié)點(diǎn)。2.CONNECT_BY_ISLEAF判斷是否為葉子節(jié)點(diǎn),是1,不是0。3.LEVEL偽列表示節(jié)點(diǎn)深度。4.SYS_CONNECT_BY_PATH函數(shù)顯示詳細(xì)路徑,并用“/”分隔。15二、列轉(zhuǎn)行sys_connect_by_path()這個函數(shù)使用
4、之前必須先建立一個樹,否則無用sys_connect_by_path(字段名,2個字段之間的連接符號)with?tmp_aas(select'1'a,'0'pfromdualunionall?select'2','1'fromdualunionall?select'3','1'fromdualunionall?select'4','3'fromdualunionall?select'5','2'fromdualunionall?select'6','5'fromdual)--子全部顯示根-->子??level代
5、表級別selecta,p,sys_connect_by_path(a,'--'),levelfromtmp_astartwitha=1connectbyp=priora15--2和2的所有下級去掉根-->子(開始就要去掉)selecta,p,sys_connect_by_path(a,'--')fromtmp_astartwithp=1anda<>'2'connectbyp=priora--2的所有下級都去掉根-->子(connect時去掉)selecta,p,sys_connect_by_path(a,'--
6、')fromtmp_astartwitha=1connectbyp=prioraandp<>'2'--去掉2的分枝--2的下一級去掉根-->子(where中去掉)selecta,p,sys_connect_by_path(a,'--')fromtmp_awherep<>'2'startwitha=1connectbyp=priora--顯示最長的根-->子with?tmp_tabas(select'中國's,nullbfromdual?unionall?select'廣東's,'中國'bfromdual?uni
7、onall?select'湖南's,'中國'bfromdual?unionall?select'衡陽's,'湖南'bfromdual?unionall?select'廣州's,'廣東'bfromdual?unionall?select'衡東's,'衡陽'bfromdual?)selectmax(sys_connect_by_path(s,'/'))fromtmp_tabstartwiths='湖南'connectbypriors=b152.分析函數(shù)總結(jié)一、統(tǒng)計方面:Sum()?Over?([Partition?
8、by?]?[Order?by?])Sum()?Over?([Partition?by?]?[Order?by?]???????Rows?Between??Preceding?And??Following)???????Sum()?Over?([Partition?by?]?[Order?by?]?????Rows?Between??Preceding?And?Current?Row)S