2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工


  1. ROWNUM的知识点

    A ROWNUM按照oracle的默认机制生成。

    B rownum只能使用<=  <号,不能使用>  >=

  2. rownum的实现机制

    rownum表示,返回的结果集的行号(是一个属性,固化到一行之中,不会因为你排序,而发生变化)。没有第一行,就没有第二行;没有第二行就没有第三行。

  3. Oracle Top-N

select rownum,empno,ename,sal

from (select empno,ename,sal

     from emp

     order by sal desc)

where rownum <= 3;

4 5=<x<=8之间的数据(分页)

select r,empno,ename,sal

from

    (

          select rownum r,empno,ename,sal

          from (

                select empno,ename,sal

                from emp

                order by sal desc

               )

          where rownum <=8

     )

where r >= 5;

总结:内存排序,外层选

Oracle分页思想总结:

(内层排序,外层选,需要三层查询)

内:排序

中:使用rownum选择前n条;并给rownum指定一个别名,以供最外层过滤使用。

外:去掉前m条结果。

  1. 找到员工表中薪水大于本部门平均薪水的员工

    员工表   本部门平均薪水

    思路1:查员工的薪水   本部门平均薪水

          本部门关系

     

    要去本部门的薪水,需要求部门的薪水,要对部门分组è分组

   

思路2:查找员工表 部门薪水表  =====》多表查询

思路3:等值连接条件

方法1

select e.empno,e.ename,e.sal,d.avgsal

 from emp e,

           (select deptno,avg(sal) avgsal

            from emp

            group by deptno) d

 where e.deptno=d.deptno and e.sal > d.avgsal;

方法2

相关子查询:主查询的参数,让子查询用,一般是通过别名技术。

一般子查询:子查询的结果,被主查询使用

select empno,ename,sal,(select avg(sal) from emp where deptno = e.deptno) avgsal

from emp e

where sal > (

            select avg(sal)

            from emp

            where deptno = e.deptno

);

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 下面是在 Oracle 中查询员工大于 3 的部门最高、最低、平均工资的语句示例: ``` SELECT department, MAX(salary) as max_salary, MIN(salary) as min_salary, AVG(salary) as avg_salary FROM employees WHERE (SELECT COUNT(*) FROM employees e WHERE e.department = employees.department) > 3 GROUP BY department ``` 这个语句会查询员工大于 3 的部门的最高、最低、平均工资。 注意:在实际使用中,表名和列名可能需要根据具体情况进行修改。 ### 回答2: 首先,我们可以使用以下SQL语句查询员工大于3的部门的最高、最低和平均工资: ```sql SELECT DEPARTMENT_ID, MAX(SALARY) as MAX_SALARY, MIN(SALARY) as MIN_SALARY, AVG(SALARY) as AVG_SALARY FROM EMPLOYEES GROUP BY DEPARTMENT_ID HAVING COUNT(*) > 3; ``` 这个查询语句首先在EMPLOYEES表中按照部门(DEPARTMENT_ID)分组,然后使用HAVING子句筛选出员工大于3的部门。接下来,使用聚合函数MAX、MIN和AVG分别计算出每个部门的最高、最低和平均工资。 最后的查询结果将会显示每个部门的DEPARTMENT_ID、最高工资(MAX_SALARY)、最低工资(MIN_SALARY)和平均工资(AVG_SALARY)。 请注意,以上查询语句假设数据库中有一个名为EMPLOYEES的表,表中包含员工的信息,其中包括部门ID(DEPARTMENT_ID)和工资(SALARY)。您可以根据实际情况修改表名和字段名。 ### 回答3: 要查询员工大于3的部门最高、最低、平均工资,可以使用以下SQL语句: ```sql SELECT department_name, MAX(salary) AS 最高工资, MIN(salary) AS 最低工资, AVG(salary) AS 平均工资 FROM employees JOIN departments ON employees.department_id = departments.department_id GROUP BY department_name HAVING COUNT(*) > 3; ``` 该语句使用了JOIN语句将employees表与departments表连接起来,根据department_id进行连接。然后使用GROUP BY语句按照部门名称进行分组,通过HAVING子句筛选出员工大于3的部门。 最后,使用MAX函数获取最高工资,MIN函数获取最低工资,AVG函数获取平均工资,并给这些结果起别名。最终查询结果将会显示部门名称、最高工资、最低工资和平均工资。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值