您的位置:首页 > 其它

20160511 GreenPlum6 分析函数之开窗函数、聚合函数与grouping sets用法

2016-05-11 13:41 309 查看
1 开窗函数

测试数据为:

部门 number 工资

发展部 8 6000

发展部 10 5200

销售部 1 5000

销售部 3 4800

发展部 7 4200

销售部 4 4800

发展部 9 4500

私立部 5 3500

私立部 2 3900

发展部 11 5200

用rank()函数,同样工资排名一样,但是排名号会往后窜:

#select 部门,number,工资,rank() over(partition by 部门 order by 工资 desc) from lianxi;

发展部 8 6000 1

发展部 10 5200 2

发展部 11 5200 2

发展部 9 4500 4

发展部 7 4200 5

私立部 2 3900 1

私立部 5 3500 2

销售部 1 5000 1

销售部 3 4800 2

销售部 4 4800 2

用row_number()函数,同样工资排名会不同:

#select 部门,number,工资,row_number() over(partition by 部门 order by 工资 desc) from lianxi;

销售部 1 5000 1

销售部 3 4800 2

销售部 4 4800 3

发展部 8 6000 1

发展部 11 5200 2

发展部 10 5200 3

发展部 9 4500 4

发展部 7 4200 5

私立部 2 3900 1

私立部 5 3500 2

2 聚合函数

所有人工资的总和:这里工资的类型要为numeric

#select *,sum(工资) over() sum1 from lianxi;

发展部 10 5200 47100

私立部 5 3500 47100

发展部 9 4500 47100

销售部 1 5000 47100

发展部 7 4200 47100

发展部 11 5200 47100

发展部 8 6000 47100

销售部 4 4800 47100

销售部 3 4800 47100

私立部 2 3900 47100

所有人工资的累加,先排序,然后第一个工资不动,下一个一次累加:

# select *,sum(工资) over(order by 工资) sum2 from lianxi;

私立部 5 3500 3500

私立部 2 3900 7400

发展部 7 4200 11600

发展部 9 4500 16100

销售部 3 4800 25700

销售部 4 4800 25700

销售部 1 5000 30700

发展部 11 5200 41100

发展部 10 5200 41100

发展部 8 6000 47100

每个部门的工资总和:

# select *,sum(工资) over(partition by 部门) sum3 from lianxi;

发展部 9 4500 25100

发展部 8 6000 25100

发展部 10 5200 25100

发展部 11 5200 25100

发展部 7 4200 25100

销售部 3 4800 14600

销售部 1 5000 14600

销售部 4 4800 14600

私立部 2 3900 7400

私立部 5 3500 7400

部门内排序后递增,但是这里没有明白为什么工资相同的值不进行累加:

#select *,sum(工资) over(partition by 部门 order by 工资) sum4 from lianxi;

私立部 5 3500 3500

私立部 2 3900 7400

销售部 3 4800 9600

销售部 4 4800 9600

销售部 1 5000 14600

发展部 7 4200 4200

发展部 9 4500 8700

发展部 10 5200 19100

发展部 11 5200 19100

发展部 8 6000 25100

3 grouping sets

对于grouping sets 的理解,看书时没看懂,但是自己用数据跑完一遍的时候我明白了这个用法的强大,它先以工资进行分组,再以部门进行分组,很方便:

#select 部门,工资,count(1) from lianxi group by grouping sets(部门,(部门,工资)) order by 工资;

私立部 3500 1

私立部 3900 1

发展部 4200 1

发展部 4500 1

销售部 4800 2

销售部 5000 1

发展部 5200 2

发展部 6000 1

私立部 2

销售部 3

发展部 5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: