欢迎投稿

今日深度:

oracle强化练习之分组函数,oracle分组函数

oracle强化练习之分组函数,oracle分组函数


1.      显示平均工资为>2000的职位

select job,avg(sal) from emp group by job having avg(sal)>2500;

2.      计算工资在2000以上,各种职位的平均工资大于3000的职位及平均工资

Select job,avg(sal) From emp where sal>2000 group by job having avg(sal)>3000;

3.      找每个部门的最高和最低的工资

Select deptno,max(sal),min(sal) From emp group by deptno;

4.      找每个部门中每种职位的最高和最低的工资

select deptno,max(sal),min(sal)  from emp group by job,deptno;

select deptno,job,max(sal),min(sal)  from emp where job is notnull group by job,deptno;

5.      显示出工作名称(job)中包含"MAN"的员工平均工资,最高工资,最低工资及工资的和

select avg(sal),max(sal),min(sal),sum(sal) from emp where job like '%MAN%';

6.      显示出20号部门的员工人数

select count(*)  from emp where deptno=20;

7.      显示出平均工资大于2000的部门名称及平均工资

Select dname,avg(sal) From dept d,emp e where e.deptno=d.deptno group by dname having avg(sal)>2000;

8.      显示每个部门每种工作平均工资大于2500的部门及工作

Select deptno,job From emp group by deptno,job having avg(sal)>2500;

9.      显示出工作名称中包含"MAN",并且平均工资大于1000的工作名称及平均工资

Select job,avg(sal) From emp group by job having avg(sal)>1000 and job like’%MAN%’;

10.   显示出平均工资最高的的部门平均工资

11.   列出最低工资大于1500的各种工作

Select job From emp group by job having min(sal)>1500;

12.   列出各部门的员工数量及平均工作年限

Select deptno,count(*),avg((sysdate-hiredate)/365) From emp group by deptno;

Select deptno,avg((months_between(sysdate,hiredate))/12) from emp group by deptno;


常用的oracle 函数, 分组函数

SELECT *

  FROM dept_costs

  WHERE dept_total > (SELECT dept_avg

  FROM avg_cost)

  ORDER BY department_name;

  GROUP BY 扩展

  带有ROLLUP和CUBE操作的GROUP BY子句

  - 使用带有ROLLUP和CUBE操作的GROUP BY子句产生多种分组结果

  - ROLLUP产生n + 1种分组结果,其是对GROUP BY子句的扩展

  - CUBE产生2的n次方种分组结果,其是对GROUP BY子句的扩展

  注:其中的n指的是group_by_expression的数目。

  ROLLUP操作符 :ROLLUP产生n + 1种分组结果,顺序是从右向左

  SELECT [column,] group_function(column). . .

  FROM table

  [WHERE condition]

  [GROUP BY [ROLLUP] group_by_expression]

  [HAVING having_expression]

  [ORDER BY column];

  CUBE操作符:CUBE会产生类似于笛卡尔集的分组结果

  SELECT [column,] group_function(column). . .

  FROM table

  [WHERE condition]

  [GROUP BY [CUBE] group_by_expression]

  [HAVING having_expression]

  [ORDER BY column];

  GROUPING函数:能够实现更加直观的分组结果显示提示

  SELECT [column,] group_function(column) . , [GROUPING(group_by_expression)]..

  FROM table

  [WHERE condition]

  [GROUP BY [ROLLUP] [CUBE] group_by_expression]

  [HAVING having_expression]

  [ORDER BY column];

  - GROUPING函数可以和CUBE或ROLLUP结合使用

  - 使用GROUPING函数,可以找到哪些列在该行中参加了分组

  - 使用GROUPING函数, 可以区分空值产生的原因

  - GROUPING函数返回0 或1

  GROUPING SETS:

  - GROUPING SETS是对GROUP BY子句的进一步扩充

  - 使用GROUPING SETS可以实现在同一个查询中定义多个分组集

  - Oracle 对GROUPING SETS子句指定的分组集进行分组后用UNION ALL操作将各分组结果结合起来

  - Grouping set 的优点:

  – 只进行一次分组即可

  – 不必书写复杂的UNION语句

  – GROUPING SETS中包含的分组项越多性能越好

  以下例子实现了对department_id, job_id分组,对job_id, manager_id分组,最终形成两个分组:

  SELECT department_id, job_id, manager_id, avg(salary......余下全文>>
 

oracle中的分组函数有什,具体怎使用?

常用的有:
COUNT() 返回查寻的行数
例如:select count(*) from table;
MAX() 返回表达式的最大值
例如:select a, max(b) from table group by a;
MIN() 返回表达式的最小值
例如:select a, min(b) from table group by a;
SUM() 返回表达式的总合
例如:select a, sum(b) from table group by a;
AVG() 返回表达式的平均值
例如:select a, avg(b) from table group by a;
此外还有分析函数over,是用来处理复杂sql的,这个涉及到的东西就有很多了。一两句话说不清楚,如果有关于这方面的问题,可以发求助或追问。
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3877.html NewsArticle oracle强化练习之分组函数,oracle分组函数 1. 显示平均工资为2000的职位 select job,avg(sal) from emp group by job having avg(sal)2500; 2. 计算工资在2000以上,各种职位的平均工资大于3000的职位及平均...
评论暂时关闭