探討SQL compute by的使用分析
GROUP BY子句有個(gè)缺點(diǎn),就是返回的結(jié)果集中只有合計(jì)數(shù)據(jù),而沒(méi)有原始的詳細(xì)記錄。如果想在SQL SERVER中完成這項(xiàng)工作,可以使用COMPUTE BY子句。COMPTE生成合計(jì)作為附加的匯總列出現(xiàn)在結(jié)果集的最后。當(dāng)與BY一起使用時(shí),COMPUTE 子句在結(jié)果集內(nèi)生成控制中斷和分類(lèi)匯總。
下列 SELECT 語(yǔ)句使用簡(jiǎn)單 COMPUTE 子句生成 titles 表中 price 及 advance 的求和總計(jì):
USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance)
下列查詢(xún)?cè)?COMPUTE 子句中加入可選的 BY 關(guān)鍵字,以生成每個(gè)組的小計(jì):
USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type
此 SELECT 語(yǔ)句的結(jié)果用12 個(gè)結(jié)果集返回,六個(gè)組中的每個(gè)組都有兩個(gè)結(jié)果集。每個(gè)組的第一個(gè)結(jié)果集是一個(gè)行集,其中包含選擇列表中所請(qǐng)求的信息。每個(gè)組的第二個(gè)結(jié)果集包含 COMPUTE 子句中兩個(gè) SUM 函數(shù)的小計(jì)。
compute by 子句的規(guī)則:
(1)不能將distinct與行統(tǒng)計(jì)函數(shù)一起使用
(2)compute ??? by 子句中 ???出的列必須出現(xiàn)在選擇列表中
(3)不能在含有compute by 子句的語(yǔ)句中使用select into 子句,因?yàn)榘╟ompute 子句的語(yǔ)句會(huì)產(chǎn)生不規(guī)則的行。
(4)如果使用了compute by子句,則必須使用order by 子句, 而且compute by子句中的列必須包含在order by 子句中,并且對(duì)列的前后順序和起始項(xiàng)都要一致(說(shuō)白了compute by子句中的列必須是order by子句中列表的全部,或者前邊的連續(xù)幾個(gè))。
(5)如果compute 省略了 by ,則order by 也可以省略
(6)如果compute by 子句包含多列時(shí),會(huì)將一個(gè)組(第一個(gè)列分的組)分成若干個(gè)子組(利用后面的列),并對(duì)每層子組進(jìn)行統(tǒng)計(jì)。
(7)使用多個(gè)compute by子句時(shí),會(huì)分別按不同的組統(tǒng)計(jì)出結(jié)果。詳細(xì)信息還是按照正常的第一個(gè)分組方式顯示。
(8)compute by 子句中可以使用多個(gè)統(tǒng)計(jì)函數(shù),他們互不影響
(9)compute by 子句中可以不包含by ,而只用compute 此時(shí)不對(duì)前面信息分組,而只對(duì)全部信息進(jìn)行統(tǒng)計(jì)。
比較 COMPUTE 和 GROUP BY
COMPUTE 和 GROUP BY 之間的區(qū)別匯總?cè)缦拢?
GROUP BY 生成單個(gè)結(jié)果集。每個(gè)組都有一個(gè)只包含分組依據(jù)列和顯示該組子聚合的聚合函數(shù)的行。選擇列表只能包含分組依據(jù)列和聚合函數(shù)。
COMPUTE 生成多個(gè)結(jié)果集。一類(lèi)結(jié)果集包含每個(gè)組的明細(xì)行,其中包含選擇列表中的表達(dá)式。另一類(lèi)結(jié)果集包含組的子聚合,或 SELECT 語(yǔ)句
的總聚合。選擇列表可包含除分組依據(jù)列或聚合函數(shù)之外的其它表達(dá)式。聚合函數(shù)在 COMPUTE 子句中指定,而不是在選擇列表中。
下列查詢(xún)使用 GROUP BY 和聚合函數(shù);該查詢(xún)將返回一個(gè)結(jié)果集,其中每個(gè)組有一行,該行中包含該組的聚合小計(jì):
USE pubs
SELECT type, SUM(price), SUM(advance)
FROM titles
GROUP BY type
說(shuō)明 在 COMPUTE 或 COMPUTE BY 子句中,不能包含 ntext、text 或 image 數(shù)據(jù)類(lèi)型。
相關(guān)文章
獲取MSSQL數(shù)據(jù)字典的SQL語(yǔ)句
獲取MSSQL數(shù)據(jù)字典的實(shí)現(xiàn)方法。2009-04-04
使用SqlBulkCopy時(shí)應(yīng)注意Sqlserver表中使用缺省值的列
今天,想將以前做的一個(gè)程序增加點(diǎn)功能,原本就使用SqlBulkCopy批量、定時(shí)的從目錄中的txt文件導(dǎo)入數(shù)據(jù)到Sqlserver中。以前一直都使用正常,但是不知怎的就老是出現(xiàn)一個(gè)錯(cuò)誤2012-07-07
SQL Server 2012 開(kāi)窗函數(shù)
這篇文章主要介紹了SQL Server 2012 開(kāi)窗函數(shù)功能的實(shí)例代碼,具體代碼如下所示2017-01-01
java 連接sql server2008數(shù)據(jù)庫(kù)配置
本篇文章給大家分享java連接sql server2008數(shù)據(jù)庫(kù)配置的相關(guān)資料,需要的朋友可以參考下2015-09-09
MSSQL 2000 使用幫助(sql server簡(jiǎn)明教程)
這篇文章主要介紹了MSSQL 2000 使用幫助(sql server簡(jiǎn)明教程),需要的朋友可以參考下2017-04-04
存儲(chǔ)過(guò)程實(shí)現(xiàn)(可帶查詢(xún)條件/萬(wàn)能分頁(yè)/通用)
可帶查詢(xún)條件的SQL語(yǔ)句的分頁(yè)存儲(chǔ)過(guò)程,在項(xiàng)目開(kāi)發(fā)中很實(shí)用,感興趣的朋友可以了解下,希望本文可以鞏固你的存儲(chǔ)過(guò)程的相關(guān)知識(shí)2013-01-01
Access 數(shù)據(jù)類(lèi)型與 MS SQL 數(shù)據(jù)類(lèi)型的相應(yīng)
Access 數(shù)據(jù)類(lèi)型與 MS SQL 數(shù)據(jù)類(lèi)型的相應(yīng)...2006-10-10
將表里的數(shù)據(jù)批量生成INSERT語(yǔ)句的存儲(chǔ)過(guò)程 增強(qiáng)版
這篇文章主要介紹了將表里的數(shù)據(jù)批量生成INSERT語(yǔ)句的存儲(chǔ)過(guò)程 增強(qiáng)版的相關(guān)資料,需要的朋友可以參考下2015-12-12

