程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> Sql進修第四天——SQL 關於with cube,with rollup和grouping說明及演示

Sql進修第四天——SQL 關於with cube,with rollup和grouping說明及演示

編輯:MSSQL

Sql進修第四天——SQL 關於with cube,with rollup和grouping說明及演示。本站提示廣大學習愛好者:(Sql進修第四天——SQL 關於with cube,with rollup和grouping說明及演示)文章只能為提供參考,不一定能成為您想要的結果。以下是Sql進修第四天——SQL 關於with cube,with rollup和grouping說明及演示正文


關於with cube ,with rollup 和 grouping

經由過程檢查sql 2005的贊助文檔找到了CUBE 和 ROLLUP 之間的詳細差別:

CUBE 生成的成果集顯示了所選列中值的一切組合的聚合。ROLLUP 生成的成果集顯示了所選列中值的某一條理構造的聚合。

再看看對grouping的說明:

當行由 CUBE 或 ROLLUP 運算符添加時,該函數將招致附加列的輸入值為 1;當行不由 CUBE 或 ROLLUP 運算符添加時,該函數將招致附加列的輸入值為 0。

僅在與包括 CUBE 或 ROLLUP 運算符的 GROUP BY 子句相干聯的選擇列表中才許可分組。

當看到以上的說明確定異常的隱約,不知所雲和不曉得該如何用,上面經由過程實例操作來體驗一下:

先建表(dbo.PeopleInfo):

CREATE TABLE [dbo].[PeopleInfo](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[numb] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
[phone] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[FenShu] [int] NULL
) ON [PRIMARY]

向表拔出數據:

insert into peopleinfo([name],numb,phone,fenshu) values ('李歡','3223','1365255',80)
insert into peopleinfo([name],numb,phone,fenshu) values ('李歡','322123','1',90)
insert into peopleinfo([name],numb,phone,fenshu) values ('李名','3213112352','13152',56)
insert into peopleinfo([name],numb,phone,fenshu) values ('李名','32132312','13342563',60)
insert into peopleinfo([name],numb,phone,fenshu) values ('王華','3223','1365255',80)

查詢出拔出的全體數據:

select * from dbo.PeopleInfo

成果如圖:

操作一:先嘗嘗:1, 查詢一切數據;2,用group by 查詢一切數據;3,用with cube。這三種情形的比擬

SQL語句以下:

select * from dbo.PeopleInfo --1, 查詢一切數據;
select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb --2,用group by 查詢一切數據;
select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb with cube --3,用with cube。這三種情形的比擬

成果如圖:

成果剖析:

  用第三種(用with cube)為何會多出來有null的字段值呢?經由過程剖析圖上的值得組合會發明是怎樣回事兒了,以第三條數據(李歡,null,170)為例:它只是把姓名是【李歡】的分為了一組,而沒有斟酌【numb】,所以有多出來了第三條數據,也解釋了170是怎樣來的。其他的也是如許。再回想一下贊助文檔的說明:CUBE 生成的成果集顯示了所選列中值的一切組合的聚合, 發明清楚明了了很多。

操作二:1,用with cube;2,用with rollup 這兩種情形的比擬

SQL語句以下:

select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb with cube --用with cube。
select [name],numb,sum(fenshu) from dbo.PeopleInfo group by [name],numb with rollup --用with rollup。

成果如圖:

成果剖析:

  為何with cube 比 with rollup多出來一部門呢?本來它沒有顯示,以【numb】分組而不斟酌【name】的數據情形。再回想一下贊助文檔的說明:ROLLUP 生成的成果集顯示了所選列中值的某一條理構造的聚合,那這個【某一條理】又是以甚麼為尺度的呢?我的料想是:間隔group up比來的字段必需斟酌在分組內。

證實料想實例:

操作:用兩個group up 交流字段地位的sql語句和一個在group up 前面增長一個字段的sql語句停止比擬:

SQL語句以下:

select [name],numb from dbo.PeopleInfo group by [name],numb with rollup
select [name],numb from dbo.PeopleInfo group by numb,[name] with rollup
select [name],numb,phone from dbo.PeopleInfo group by [name],numb,phone with rollup

成果如圖:

經由過程成果圖的比擬發明料想是准確的。

---------------------------------------------------grouping-------------------------------------------------

如今來看看grouping的實例:

SQL語句看看與with rollup的聯合(與with cube的聯合是一樣的):

select [name],numb,grouping(numb) from dbo.PeopleInfo group by [name],numb with rollup

成果如圖:

成果剖析:

聯合贊助文檔的說明:當行由 CUBE 或 ROLLUP 運算符添加時,該函數將招致附加列的輸入值為 1;當行不由 CUBE 或 ROLLUP 運算符添加時,該函數將招致附加列的輸入值為 0。  很輕易懂得再此就不多說明了。

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