程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 探討SQL compute by的使用分析

探討SQL compute by的使用分析

編輯:關於SqlServer

GROUP BY子句有個缺點,就是返回的結果集中只有合計數據,而沒有原始的詳細記錄。如果想在SQL SERVER中完成這項工作,可以使用COMPUTE BY子句。COMPTE生成合計作為附加的匯總列出現在結果集的最後。當與BY一起使用時,COMPUTE 子句在結果集內生成控制中斷和分類匯總。

下列 SELECT 語句使用簡單 COMPUTE 子句生成 titles 表中 price 及 advance 的求和總計:
復制代碼 代碼如下:
USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance)

下列查詢在 COMPUTE 子句中加入可選的 BY 關鍵字,以生成每個組的小計:

USE pubs
復制代碼 代碼如下:
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type

此 SELECT 語句的結果用12 個結果集返回,六個組中的每個組都有兩個結果集。每個組的第一個結果集是一個行集,其中包含選擇列表中所請求的信息。每個組的第二個結果集包含 COMPUTE 子句中兩個 SUM 函數的小計。

compute by 子句的規則:

(1)不能將distinct與行統計函數一起使用

(2)compute ??? by 子句中 ???出的列必須出現在選擇列表中

(3)不能在含有compute by 子句的語句中使用select into 子句,因為包括compute 子句的語句會產生不規則的行。

(4)如果使用了compute by子句,則必須使用order by 子句, 而且compute by子句中的列必須包含在order by 子句中,並且對列的前後順序和起始項都要一致(說白了compute by子句中的列必須是order by子句中列表的全部,或者前邊的連續幾個)。

(5)如果compute 省略了 by ,則order by 也可以省略

(6)如果compute by 子句包含多列時,會將一個組(第一個列分的組)分成若干個子組(利用後面的列),並對每層子組進行統計。

(7)使用多個compute by子句時,會分別按不同的組統計出結果。詳細信息還是按照正常的第一個分組方式顯示。

(8)compute by 子句中可以使用多個統計函數,他們互不影響

(9)compute by 子句中可以不包含by ,而只用compute  此時不對前面信息分組,而只對全部信息進行統計。

比較 COMPUTE 和 GROUP BY
COMPUTE 和 GROUP BY 之間的區別匯總如下:
GROUP BY 生成單個結果集。每個組都有一個只包含分組依據列和顯示該組子聚合的聚合函數的行。選擇列表只能包含分組依據列和聚合函數。

COMPUTE 生成多個結果集。一類結果集包含每個組的明細行,其中包含選擇列表中的表達式。另一類結果集包含組的子聚合,或 SELECT 語句
的總聚合。選擇列表可包含除分組依據列或聚合函數之外的其它表達式。聚合函數在 COMPUTE 子句中指定,而不是在選擇列表中。
下列查詢使用 GROUP BY 和聚合函數;該查詢將返回一個結果集,其中每個組有一行,該行中包含該組的聚合小計:
USE pubs
SELECT type, SUM(price), SUM(advance)
FROM titles
GROUP BY type

說明 在 COMPUTE 或 COMPUTE BY 子句中,不能包含 ntext、text 或 image 數據類型。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved