SQL SEVER (ROLLUP与CUBE,ROW_NUMBER())使用方法
1.建立测试专用数据;
if object_id('TESTDB') is not null drop table TESTDB create table TESTDB(A varchar(8), B INT) insert into TESTDB select 'A1', 6 union all select 'A1', 8 union all select 'A1', 67 union all select 'A2', 67 union all select 'A2', 4 union all select 'A2', 112 union all select 'A3', 90 union all
此处:可以用SELECT 与 UNION联合的插入方法,方便快捷,前提是插入数据的列与表的列相同;
2.ROW_NUMBER() 使用
ROW_NUMBER()的使用,主要是对数据进行分组时,对组内的数据进行排序,对临时表的内容进行测试,语句如下:
SELECT * ,ROW_NUMBER() OVER( PARTITION BY A ORDER BY B DESC) NUM FROM TESTDB GROUP BY A,B
执行结果如下:
分析:语句根据A、B进行分组,分组后内部按照A进行分区,B列进行排序,增添NUM计数信息;
3.ROLLUP 与 CUBE 的对比
首先:对于进行ROULLUP排序;
SELECT * ,ROW_NUMBER() OVER( PARTITION BY A ORDER BY B DESC) NUM FROM TESTDB GROUP BY A,B WITH ROLLUP
分析:与无ROLLUP对比,多出来了四行数据,四行数据分别为:
1).单独对A进行分组,忽略B对其用NULL代替;
2)忽略A、B进行分组,即多出一行空值;
以此类推的话:如果是三列A、B、C进行ROLLUP的话,应该是先对A进行分组,再对A、B分组,最后是A、B、C均不考虑就是空值一行,随后测试猜想;对表进行列的增加;
create table TESTDB(A varchar(8), B INT,C varchar(8)) insert into TESTDB select 'A1', 6,'A' union all select 'A1', 8,'B' union all select 'A1', 67,'C' union all select 'A2', 67,'A' union all select 'A2', 4 ,'B' union all select 'A2', 112, 'C' union all select 'A3', 90, 'D' union all
select 'A3', 6,'D'
SELECT * FROM TESTDB GROUP BY A,B,C WITH ROLLUP
猜想正确,总结出规律为:分别对group分组的列按照顺序,依次组合进行分组,A、B、C则为三个均不考虑,只考虑A,考虑A、B,考虑A、B、C排序即为ROLLUP 的内在逻辑。
4.CUBE的使用
对两列时进行CUBE排序与ROLLUP进行对比
SELECT * ,ROW_NUMBER() OVER( PARTITION BY A ORDER BY B DESC) NUM FROM TESTDB GROUP BY A,B WITH CUBE
对比得知:CUBE排序方式为
GROUP BY A
GROUP BY B
GROUP BY A、B
NULL行
ROLLUP为:
NULL行
GROUP BY A
GROUP BY A、B
CUBE要比ROLLUP分别排序的全,内部元素均会一一排序;ROLLUP则为顺序排序。
SQL SEVER (ROLLUP与CUBE,ROW_NUMBER())使用方法的更多相关文章
- sql sever跨数据库复制数据的方法【转】
1,用Opendatasource系统函数 详细的用法已经注释在sql代码中了.这个是在sqlserver到sqlserver之间的倒数据.2005,2008,2012应该都是适用的. --从远程服务 ...
- sql sever跨数据库复制数据的方法
1,用Opendatasource系统函数 详细的用法已经注释在sql代码中了.这个是在sqlserver到sqlserver之间的倒数据.2005,2008,2012应该都是适用的. --从远程服务 ...
- sql sever 创建临时表的两种方法
创建临时表 方法一: create table #临时表名( 字段1 约束条件, 字段2 约束条件, .....) ...
- 转:GROUPING SETS、ROLLUP、CUBE
转:http://blog.csdn.net/shangboerds/article/details/5193211 大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那 ...
- GROUPING SETS、ROLLUP、CUBE
大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那么本文不适合你.还记得当初学习SQL的时候,总是理解不了GROUP BY的作用,经过好长时间才终于明白GROUP BY ...
- java连接到sql sever 2008_java基础学习
(sql sever 2008跟sql sever 2005装载JDBC驱动的方法是一样的) 一.加载驱动的文字教程 1.准备相关的软件(Eclipse除外,开源软件可以从官网下载) <1> ...
- SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE
1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...
- [实战经验][SQL Sever 2008 (R)解决方法累积
SQL Sever 2008 (R)的安装图解及配置 http://www.soft6.com/v9/2009/jcsj_1030/115821.html 产品密钥,选择“输入产品密钥”,输入:PTT ...
- SQL Server ->> GROUPING SETS, CUBE, ROLLUP, GROUPING, GROUPING_ID
在我们制作报表的时候常常需要分组聚合.多组聚合和总合.如果通过另外的T-SQL语句来聚合难免性能太差.如果通过报表工具的聚合功能虽说比使用额外的T-SQL语句性能上要好很多,不过不够干脆,还是需要先生 ...
随机推荐
- 0316 【案例】MySQL count操作优化案例一则
转自http://blog.itpub.net/22664653/viewspace-1791124/ 一 背景 某业务的数据库定期报 thread_runing 飙高,通定位发现一个慢查询sql ...
- 服务器监控(包括性能指标与web应用程序)
http://blog.csdn.net/yao123long/article/details/53142029 http://blog.csdn.net/heyongluoyao8/article/ ...
- DNS绑定多个IP地址
DNS轮循技术 首先介绍一个DNS系统:传统的DNS解析都是一个域名对应一个IP地址,但是通过DNS轮循技术(负载平衡技术)可以做到一个域名对应到多个IP 上. 这样大家难免就会问,这个技术有什么用呢 ...
- [bzoj2529][Poi2011]Sticks_贪心
Sticks bzoj-2529 Poi-2011 题目大意:给你n根木棒,每种木棒有长度和颜色,颜色共有k种,求满足条件的3根木棒使得这3根木棒颜色互不相同且可以围成三角形. 注释:$1\le n ...
- Thread.suspend和println使线程死锁
Thread.suspend和println使线程死锁 package com.stono.thread2.page39; public class MyThread extends Thread{ ...
- macOS10.9+xcode6编译ffmpeg2.4.2 for ios
近期须要用到ffmpeg开发视频相关.在网上找了些编译资源,自己摸索着,总算编译ok了. 因此,记录下苦逼的编译过程,已祭奠我为之逝去的青春. 1.准备工作 首先.到ffmpeg官网下载最新到代码. ...
- Linux下把目录拷贝到全部同名目录的脚本
需求:拷贝文件夹到Linux文件夹下.覆盖该Linux文件夹下全部同名文件夹 目标:Linux下,运行本脚本.输入目录名.就可以批量复制覆盖. 使用说明: 先把本脚本文件和要复制的文件 ...
- B1108 [POI2007]天然气管道Gaz 贪心
啊啊啊,这题有毒.我想了各种花式数据结构,最后告诉我贪心???受不了... 题干: Description Mary试图控制成都的天然气市场.专家已经标示出了最好的天然气井和中转站在成都的地图.现在需 ...
- k8s traefik ingress tls
使用下面的 openssl 命令生成 CA 证书: $ openssl req -newkey rsa:2048 -nodes -keyout tls.key -x509 -days 365 -out ...
- pip换源简易方法
安装pqi >>> pip install pqi 列出pip源 >>> pqi ls 使用pip源 >>> pqi use <name&g ...