概述 對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)用SQL實(shí)現(xiàn)行列轉(zhuǎn)換,不但需要編寫(xiě)復(fù)雜的程序代碼,還需要編寫(xiě)存儲(chǔ)過(guò)程 。若引入ORACLE中的分析函數(shù)則會(huì)使該過(guò)程簡(jiǎn)便很多 。首先找出表中所有關(guān)鍵字的屬性個(gè)數(shù)的最大值,設(shè)為n,其次為每個(gè)關(guān)鍵字新添加n列,并用分析函數(shù)查詢關(guān)鍵字的屬性所處列的位置,然后將每個(gè)關(guān)鍵字的多行屬性轉(zhuǎn)換成多列屬性,最后把生成的多個(gè)新列拼成一個(gè)串形成一列,從而實(shí)現(xiàn)行列轉(zhuǎn)換 。
引言 分析函數(shù)的設(shè)計(jì)目的是為了解決諸如“累計(jì)計(jì)算”等問(wèn)題 。雖然大部分的問(wèn)題都可以用PL/SQL解決,但是性能并不理想,首先查詢本身并不容易編寫(xiě),其次有些很難在SQL中直接做的查詢但實(shí)際上是很普通的操作,比如實(shí)現(xiàn)數(shù)據(jù)表中行列傳換 。這樣的問(wèn)題在SQL中做查詢就很困難 。在分析函數(shù)出現(xiàn)以前,我們必須使用自聯(lián)查詢或者子查詢甚至復(fù)雜的存儲(chǔ)過(guò)程實(shí)現(xiàn)的語(yǔ)句,現(xiàn)在只要一條簡(jiǎn)單的SQL語(yǔ)句就可以實(shí)現(xiàn)了,而且在執(zhí)行效率方面也有相當(dāng)大的提高 。本文將以一個(gè)實(shí)例來(lái)描述如何采用分析函數(shù)實(shí)現(xiàn)數(shù)據(jù)中的行列互換 。
原理 1、分析函數(shù)的格式及語(yǔ)法
分析函數(shù)是在一個(gè)記錄行分組的基礎(chǔ)上計(jì)算它們的總值 。行的分組被稱窗口,并通過(guò)分析語(yǔ)句定義 。對(duì)于每記錄行,定義了一個(gè)“滑動(dòng)”窗口 。該窗口確定“當(dāng)前行”計(jì)算的范圍 。窗口的大小可由各行的實(shí)際編號(hào)或由時(shí)間等邏輯間隔確定 。
分析函數(shù)以如下形式開(kāi)頭:
Analytic-Function(,,...)OVER (
(2)Arguments:參數(shù),分析函數(shù)通常有0到3個(gè)參數(shù),參數(shù)可以是任何數(shù)字類型或是可以隱式轉(zhuǎn)換為數(shù)字類型的數(shù)據(jù)類型 。對(duì)于用戶自定義的參數(shù),可以根據(jù)實(shí)際情況使用 。
(3)OVER:是分析函數(shù)就必須使用的關(guān)鍵字,對(duì)于既可作為聚集函數(shù)又可作為分析函數(shù)的函數(shù),Oracle無(wú)法識(shí)別,必須用over來(lái)標(biāo)識(shí)此函數(shù)為分析函數(shù) 。
(4)Query-Partition-Clause:查詢分組子句,根據(jù)劃分表達(dá)式設(shè)置的規(guī)則,PARTITION BY將一個(gè)結(jié)果邏輯分成N個(gè)分組劃分表達(dá)式 。分析函數(shù)獨(dú)立應(yīng)用于各個(gè)分組,并在應(yīng)用時(shí)重置 。
(5)Order-By-Clause:(按…排序分組),是排序子句,根據(jù)一個(gè)或多個(gè)排序表達(dá)式對(duì)分組進(jìn)行排序 。
(6)Windowing-Clause窗口生成語(yǔ)句:窗口生成語(yǔ)句用以定義滑動(dòng)或固定數(shù)據(jù)窗口,分析函數(shù)在分組內(nèi)進(jìn)行分析 。該語(yǔ)句能夠?qū)Ψ纸M中任意定義的滑動(dòng)或固定窗口進(jìn)行計(jì)算 。
猜你喜歡
- 鼓勵(lì)孩子學(xué)習(xí)的經(jīng)典語(yǔ)句 為明天的成功努力
- varchar2是什么類型
- 數(shù)據(jù)庫(kù)設(shè)計(jì)的步驟有哪些
- 最唯美的英文經(jīng)典語(yǔ)句 最唯美的英文經(jīng)典語(yǔ)句有什么
- 最暖心的祝福語(yǔ)句 關(guān)于祝福的暖心話語(yǔ)介紹
- mysql存儲(chǔ)過(guò)程詳解 mysql存儲(chǔ)過(guò)程
- 數(shù)據(jù)庫(kù)系統(tǒng)相關(guān)人員哪三類
- qq個(gè)性簽名經(jīng)典語(yǔ)句 qq個(gè)性簽名經(jīng)典語(yǔ)句有哪些
- 勵(lì)志的句子經(jīng)典語(yǔ)句 勵(lì)志天下
- 拜年祝福語(yǔ)句子 牛年的拜年優(yōu)秀祝福語(yǔ)
