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。 很輕易懂得再此就不多說明了。