Oracle 子查询和组函数练习

SELECT * FROM emp;

1306719-20190417120446070-2025708490.png

SELECT * FROM dept;

1306719-20190417120449573-1539193572.png

1、查询公司员工工资的最大值,最小值,平均值和总和。

SELECT MAX(sal) AS 工资最大值, MIN(sal) AS 工资最小值
    , AVG(sal) AS 工资平均值, SUM(sal) AS 工资总和
FROM emp;

1306719-20190417120533338-182974872.png

2、查询各 job 的员工工资的最大值,最小值,平均值和总和。

SELECT job, MAX(sal), MIN(sal)
    , AVG(sal), SUM(sal)
FROM emp
GROUP BY job;

1306719-20190417120558473-1846488905.png

3、选择具有各个 job 的员工人数

SELECT job, COUNT(job) AS 人数
FROM emp
GROUP BY job;

1306719-20190417125119021-1487161040.png

4、显示平均工资 >2000 的职位

SELECT job
FROM emp
GROUP BY job
HAVING AVG(sal) > 2000;

1306719-20190417125211302-954408164.png

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

SELECT job, AVG(sal)
FROM emp
WHERE sal > 2000
GROUP BY job
HAVING AVG(sal) > 3000;

1306719-20190417125237688-387397539.png

6、找出每个部门的最高和最低工资

SELECT deptno, MAX(sal) AS 最高工资, MIN(sal) AS 最低工资
FROM emp
GROUP BY deptno;

1306719-20190417125321358-577345449.png

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

SELECT AVG(sal) AS 平均工资, MAX(sal) AS 最大工资
    , MIN(sal) AS 最小工资, SUM(sal) AS 工资总和
FROM emp
WHERE job LIKE '%MAN%';

1306719-20190417125344732-1591230551.png

8、显示出 20 号部门的员工人数

SELECT deptno, COUNT(empno) AS 员工人数
FROM emp
WHERE deptno = 20
GROUP BY deptno;

1306719-20190417125411945-755951452.png

9、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。

SELECT ename AS 雇员姓名
FROM emp
WHERE deptno = (
    SELECT deptno
    FROM dept
    WHERE dname = 'SALES'
);

1306719-20190417125435885-523150079.png

10、列出薪金高于公司平均水平的所有雇员

SELECT *
FROM emp
WHERE sal > (
    SELECT AVG(sal)
    FROM emp
);

1306719-20190417125502002-1695312648.png

11.查询与“SCOTT”在同一个部门的员工

SELECT *
FROM emp
WHERE deptno = (
    SELECT deptno
    FROM emp
    WHERE ename = 'SCOTT'
);

1306719-20190417125537497-981615570.png

12.查找不在销售部 (SALES) 和财务部 (ACCOUNTING) 工作的雇员编号、姓名和部门编号。

SELECT empno, ename, deptno
FROM emp
WHERE deptno NOT IN (
    SELECT deptno
    FROM dept
    WHERE dname = 'ACCOUNTING'
        OR dname = 'SALES'
);

1306719-20190417125605112-803912230.png

13.在 EMP 表中,找出每个超过他所在部门平均工资的员工编号,员工名称,薪水和部门编号。

SELECT empno, ename, sal, e2.deptno
FROM emp e1, (
        SELECT deptno, AVG(sal) AS avgsal
        FROM emp
        GROUP BY deptno
    ) e2
WHERE e1.deptno = e2.deptno
    AND sal > avgsal;

1306719-20190417125627837-1328964581.png

14、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门 30 中任何一个雇员的薪金。

SELECT ename, sal
FROM emp
WHERE sal = ANY (
    SELECT sal
    FROM emp
    WHERE deptno = 30
);

SELECT ename, sal
FROM emp
WHERE sal IN (
    SELECT sal
    FROM emp
    WHERE deptno = 30
);

1306719-20190417125714976-833036912.png

15、列出各个部门 MANAGER(经理)的最低薪金

SELECT deptno, MIN(sal)
FROM emp
WHERE job = 'MANAGER'
GROUP BY deptno;

1306719-20190417125800965-514638887.png

转载于:https://www.cnblogs.com/hglibin/p/9904110.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值