oracle数据库中分析函数大全,Oracle数据库的分析函数

over 连续的相加

求各部门的薪水总和和全部总和 select name, salary, emp

sum(salary) over (order by emp) 连续求和

sum(salary) over () 总和

100*round(sal/sum(sal) over(), 5) 份额

from company;

sum() = sum over() 求的是总和,

sum over (order by ) 求的是连续的和,即当前部门的结果+=上一个部门查询的结果

over partition by 分区 select name, salary, emp

sum(salary) over (partition by emp ) 部门总和 # 同一部门总和不变

from company;

over partition by order by 分区内部连续求和 select name, salary, emp

sum(salary) over (partition by emp order by name) 部门内部薪水连续求和

sum(salary) over (partition by emp ) 部门总和 # 同一部门总和不变

from company;

row_number | rank | dense_rank 排名

row_number  输出结果名次不跳跃,不重复

根据部门分组,显示每个部门的工资等级,按照升序排名 select name, salary, emp

row_number() over (partition by emp order by salary) as "排名"

from company;

rank 名次跳跃,针对和总数据条数的对应

语法同上,但是会有并列的情况,且并列的个数会占排序的一个位置

即如果有三个第一名并列,那么第二名的编号为4 select name, salary, emp

rank() over (partition by emp order by salary) as "排名"

from company;

dense_rank 名次不跳跃,针对名次对应的顺序

不会产生名次的跳跃,即三个第一名,那么第二名的编号依然为2,用法同上

rollup 针对group by 再次统计,作用于局部字段

根据月份和地区分组,并统计分组的工资总和,(分组的最小单位为地区)。

月份下的不同地区会衍生出多条记录,因此sum统计的是最小单位的分组记录 select mouth,area,sum(salary) from company

group by mouth, area;

根据月份和地区分组,并统计分组的工资总和,以及对当前月份工资总和以及所有的汇总

汇总的依据为分组的最大单位,即顺序靠前的分组依据; select mouth,area,sum(salary) from company

group by rollup(mouth, area);

cube 对 rollup 的升级,针对全部字段

除了根据 月份汇总外,还根据 地区汇总,并统计所有汇总的总和 select mouth,area,sum(salary) from company

group by cube(mouth, area);

grouping 对聚合结果没有字段名字的 null 值 设置别名

grouping(parm),带一个参数,参数为字段名,

如果是本身的结果就返回0,如果是聚合的结果就返回1

case ... vhen ... then ... else ... end 通用SQL条件判断语句 select mouth,

# 如果是针对月份的统计的结果,返回为0

(case vhen ((grouping(area)=1) and (grouping(mouth)=0) then "月份小记"

# 如果是针对所有结果的总和,

vhen ((grouping(area)=1) and (grouping(mouth)=1) then "总计"

# 如果两者都为0,那么就是针对地区的统计结果

else area

end) as area, sum(salary)

from company

group by rollup(mouth, area);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值