grouping sets,cube,rollup,grouping__id,group by

例1:

hive -e"

select

type

,status

,count(1)

from

usr_info

where pt=‘2015-09-14‘

group by type,status

grouping sets ((type,status),( type),());

">one.txt

Grouping sets按照各种指定聚类汇总方式,如group by type,status

grouping sets ((type,status),( type),())

表示group by type,status union all  group by type union all group by ()

得到

type status       _c2

NULL         NULL         69467

1       NULL         68216

1       1       63615

1       2       540

1       4       4061

2       NULL         891

2       1       873

2       2       18

3       NULL         360

3       1       340

3       4       20

例2:

hive -e"

select

type

,status

,count(1)

from

usr_info

where pt=‘2015-09-14‘

group by type,status with rollup;

">two.txt

group by type,status with rollup按照以type为主的固定聚类汇总方式,如同group by type,status grouping sets ((type,status),( type),()) ,不过形式已经固定了

表示group by type,status union all  group by type union all group by ()

得到

Type status      _c2

NULL         NULL         69467

1       NULL         68216

1       1       63615

1       2       540

1       4       4061

2       NULL         891

2       1       873

2       2       18

3       NULL         360

3       1       340

3       4       20

例3:

hive -e"

select

type

,status

,count(1)

from

usr_info

where pt=‘2015-09-14‘

group by type,status with cube;

">three.txt

group by type,status with cube按照以type和status为主的固定聚类汇总方式,如同group by type,status grouping sets ((type,status),( type),(status),()) ,不过形式已经固定了

表示group by type,status union all group by type union all group by status union all group by ()

得到

Type status      _c2

NULL         NULL         69467

NULL         1       64828

NULL         2       558

NULL         4       4081

1       NULL         68216

1       1       63615

1       2       540

1       4       4061

2       NULL         891

2       1       873

2       2       18

3       NULL         360

3       1       340

3       4       20

例4:

hive -e"

select

type

,status

,grouping__id

,count(1)

from

usr_info

where pt=‘2015-09-14‘

group by type,status with cube;

">five.txt

type

,status

,grouping__id

grouping__id(两条横线)函数判断其参数是否参与了分组,如果参与则返回1,

如果没有参与了分组则返回0

而其多个参数的形式则将其每个参数进行grouping__id运算后返回的值拼成二进制后转换为十进制返回,

grouping_id(argn,...,arg2,arg1)=grouping_id(argn)*2^(n-1)+...+grouping_id(arg2)*2^1+grouping_id(arg1)*2^0(‘^‘表示幂运算)。

Hive中grouping__id不带参数,用法见例子。

得到

type status    grouping__id   _c3

NULL         NULL         0       69467

NULL         1       2       64828

NULL         2       2       558

NULL         4       2       4081

1       NULL         1       68216

1       1       3       63615

1       2       3       540

1       4       3       4061

2       NULL         1       891

2       1       3       873

2       2       3       18

3       NULL         1       360

3       1       3       340

3       4       3       20

时间: 2024-10-05 18:31:51

grouping sets,cube,rollup,grouping__id,group by的相关文章

SQL Server ->> GROUPING SETS, CUBE, ROLLUP, GROUPING, GROUPING_ID

在我们制作报表的时候常常需要分组聚合.多组聚合和总合.如果通过另外的T-SQL语句来聚合难免性能太差.如果通过报表工具的聚合功能虽说比使用额外的T-SQL语句性能上要好很多,不过不够干脆,还是需要先生成整个结果集然后再聚合,而且最最重要的时很多情况下报表的聚合功能可能没办法达到我们需要的效果.GROUPING SETS, CUBE, ROLLUP, GROUPING, GROUPING_ID这几个聚合函数的作用就是在原始语句的基础上完成很多像财务报表需要的聚合功能. GROUPING SETS相

SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE

原文:SQL Server 之 GROUP BY.GROUPING SETS.ROLLUP.CUBE 1.创建表 Staff CREATE TABLE [dbo].[Staff]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [varchar](50) NULL, [Sex] [varchar](50) NULL, [Department] [varchar](50) NULL, [Money] [int] NULL, [CreateDate] [date

转:GROUPING SETS、ROLLUP、CUBE

转:http://blog.csdn.net/shangboerds/article/details/5193211 大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那么本文不适合你.还记得当初学习SQL的时候,总是理解不了GROUP BY的作用,经过好长时间才终于明白GROUP BY的真谛.当然,这和我本人笨也有关系,但是GROUP BY的确不好理解.本文将介绍DB2 GROUPING SETS.ROLLUP.CUBE的使用方法,这些关键字比GROUP BY更难

Grouping Sets:CUBE和ROLLUP从句

在上一篇文章里我讨论了SQL Server里Grouping Sets的功能.从文中的例子可以看到,通过简单定义需要的分组集是很容易进行各自分组.但如果像从所给的列集里想要有所有可能的分布——即所谓的幂集(Power Set),要怎么做呢? 当然,你可以用grouping set的语法功能来手动生成幂集,但那需要写一大堆的代码.因此今天我向你展示下grouping set功能支持的2个从句:CUBE和ROLLUP从句. CUBE从句 使用CUBE从句,对于提供的列集,你可以生成所有可能的分组集.

Group By 多个分组集小结 --GROUPING SETS,GROUP BY CUBE,GROUP BY ROLLUP,GROUPING(),GROUPING_ID()

T-SQL 多个分组集共有三种 GROUPING SETS, CUBE, 以及ROLLUP, 其中 CUBE和ROLLUP可以当做是GROUPING SETS的简写版 示例数据库下载: http://files.cnblogs.com/files/haseo/TSQL2012.rar GROUPING SETS 列出所有你设置的分组集 SELECT shipperid, YEAR(shippeddate) AS shipyear, COUNT(*) AS numorders FROM Sales

TSQL 分组集(Grouping Sets)

分组集(Grouping Sets)是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用“union all”,计算多个结果集的并集.使用分组集的聚合查询,返回的select 子句相同,由于select子句只能引用分组列,因此,在单个分组中缺失的分组列,TSQL返回NULL值. TSQL使用 group by 子句分组,有4种不同的语法: group by a,b group by rollup(a,b) group by cube(a,b) group

Grouping Sets

Group by分组函数的自定义,与group by配合使用可更加灵活的对结果集进行分组,Grouping sets会对各个层级进行汇总,然后将各个层级的汇总值union all在一起,但却比单纯的group by + union all 效率要高 1 创建数据 CREATE TABLE employee ( name NVARCHAR2(10), gender NCHAR(1), country NVARCHAR2(10), department NVARCHAR2(10), salary N

Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP

1.GROUPING SETS与另外哪种方式等价? 2.根据GROUP BY的维度的所有组合进行聚合由哪个关键字完成? 3.ROLLUP与ROLLUP关系是什么? GROUPING SETS,GROUPING__ID,CUBE,ROLLUP 这几个分析函数通常用于OLAP中,不能累加,而且需要根据不同维度上钻和下钻的指标统计,比如,分小时.天.月的UV数. Hive版本为 apache-hive-0.13.1 数据准备: 2015-03,2015-03-10,cookie1 2015-03,20

SQL Server2008 程序设计 汇总 GROUP BY,WITH ROLLUP,WITH CUBE,GROUPING SETS(..)

--SQL Server2008 程序设计 汇总 GROUP BY ,WITH ROLLUP  WITH CUBE  GROUPING SET(..) /******************************************************************************** *主题:SQL Server2008 程序设计 汇总 group by ,WITH ROLLUP  WITH CUBE *说明:本文是个人学习的一些笔记和个人愚见 *      有很多