zoukankan      html  css  js  c++  java
  • 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);
        
  • 相关阅读:
    2,SFDC 管理员篇
    1,SFDC 管理员篇
    0,SFDC 管理员篇
    Java控制台中输入中文输出乱码的解决办法
    struts1和struts2线程安全问题
    PL/SQL Developer使用技巧、快捷键
    SpringMVC前传--从Struts 1.x-2.x MVC-Spring 3.0 MVC
    H5元素拖拽使用事件数据传输
    js实现拼图小游戏
    js实现简单轮播图效果
  • 原文地址:https://www.cnblogs.com/wang-kai-1994/p/10802948.html
Copyright © 2011-2022 走看看