Oracle 高级查询sql DECODE函数 分组函数

来源:互联网 发布:淘宝卖家攻略2017 编辑:程序博客网 时间:2024/04/30 13:43
计算职位的人数,其中,“ANALYST”和“MANAGER”职位用“VIP”表示,其余是普通员工,职位用“OPERATION”显示。分别计算VIP职位和普通职员职位的人数,数据显示效果如图-1所示。

步骤一:使用DECODE函数,按要求显示数据

使用DECODE函数,计算职位的人数,“ANALYST”和“MANAGER”职位用“VIP”表示,其余是普通员工,职位用“OPERATION”表示。分别计算VIP职位和普通职员职位的人数,SQL语句如下所示:

  1. SELECT DECODE(job,
  2. 'ANALYST', 'VIP',
  3. 'MANAGER', 'VIP',
  4. 'OPERATION') job,
  5. COUNT(1) job_cnt
  6. FROM emp
  7. GROUP BY DECODE(job, 'ANALYST', 'VIP', 'MANAGER', 'VIP', 'OPERATION');

使用DECODE函数实现自定义排序

使用DECODE函数,将dept表中的数据按”OPERATIONS”、“ACCOUNTING”、“SALES”进行自定义排序,SQL语句如下所示:

  1. SELECT deptno, dname, loc
  2. FROM dept
  3. ORDER BY
  4. DECODE(dname, 'OPERATIONS',1,'ACCOUNTING',2,'SALES',3);

步骤三:使用ROW_NUMBER函数实现分组排序

使用ROW_NUMBER函数按照部门编码分组显示,每组内按职员编码排序,并赋予组内编码,SQL语句如下所示:

  1. SELECT deptno, ename, empno,
  2. ROW_NUMBER()
  3. OVER (PARTITION BY deptno ORDER BY empno) AS emp_id
  4. FROM emp;

ROW_NUMBER函数计算的值就表示每组内部排序后的顺序编号,组内连续且唯一。

步骤四:使用RANK函数实现分组排序

使用RANK函数将职员表中按照部门编码分组,同组内按薪水降序排列,相同薪水则按奖金数升序排列,并显示等级标识,用Rank_ID表示,SQL语句如下所示:

  1. SELECTdeptno, ename, sal, comm,
  2. RANK() OVER (PARTITIONBYdeptno
  3. ORDERBYsalDESC, comm) "Rank_ID"
  4. FROMemp;

RANK函数排序后的等级标识是跳跃的,即如果有相同数据,则排名相同,比如并列第二,则两行数据都标记为2,但下一位将是第四名。

步骤五:使用DENSE_RANK函数实现分组排序

关联emp和dept表,使用DENSE_RANK函数,按照部门编码分组,每组内按照员工薪水升序排列,列出员工的部门名字、姓名和薪水及等级drank,SQL语句如下所示:

  1. SELECTd.dname, e.ename, e.sal,
  2. DENSE_RANK()
  3. OVER (PARTITIONBYe.deptnoORDERBYe.sal)
  4. ASdrank
  5. FROMempejoindeptd
  6. one.deptno = d.deptno;

DENSE_RANK函数排序后的等级标识是连续的,即如果有并列第二,下一个排序将是三,这一点是和RANK函数不同,RANK是跳跃排序。

使用ROLLUP函数统计2010-2011年每月每日的销售额,SQL语句如下所示:

  1. SELECT year_id, month_id, day_id, SUM(sales_value) AS sales_value
  2. FROM sales_tab
  3. GROUP BY ROLLUP (year_id, month_id, day_id)
  4. ORDER BY year_id, month_id, day_id;

上述SQL语句会依次按照(year_id, month_id, day_id)分组、(year_id, month_id)分组、(day_id)分组以及全表分组。

使用CUBE函数统计年月的销售额,SQL语句如下所示:

  1. SELECT year_id, month_id,
  2. SUM(sales_value) AS sales_value
  3. FROM sales_tab
  4. GROUP BY CUBE (year_id, month_id)
  5. ORDER BY year_id, month_id;

上述SQL语句会依次按照(year_id, month_id)分组、(year_id)分组、(month_id)分组以及全表分组。

步骤八:使用GROUPING SETS函数统计销售额

使用GROUPING SETS函数统计年月的销售额,SQL语句如下所示:

  1. SELECT year_id, month_id, SUM(sales_value)
  2. FROM sales_tab
  3. GROUP BY GROUPING SETS ((year_id), (month_id))
  4. order by 1, 2;

上述SQL语句会依次按照(year_id)分组、(month_id)分组。



0 0
原创粉丝点击