设为首页 加入收藏

TOP

用Mysql进行emp、dept、salgrade表的相关查询操作(二)
2019-09-17 18:38:09 】 浏览:63
Tags:Mysql 进行 emp dept salgrade 相关 查询 操作
WHERE deptno IN(
            SELECT b.deptno FROM (SELECT COUNT(*) count,deptno FROM emp GROUP BY deptno) b
            WHERE 
            b.count IN (
                        SELECT MAX(a.count)FROM (SELECT COUNT(*) count,deptno FROM emp GROUP BY deptno ) a));
-- d)    部门平均薪水最高的部门编号:

有两种方法:

方法一:利用分页查询:

-- 1、查询各部门的平均薪水,并进行降序排序
SELECT deptno, AVG(sal) avgsal FROM emp GROUP BY deptno ORDER BY avgsal DESC ;
-- 2、分页查询,取出第一行数据,即最高的平均薪水部门编号
SELECT deptno, AVG(sal) avgsal FROM emp GROUP BY deptno ORDER BY avgsal DESC LIMIT 1;
-- 3、经上面数据当做一张表,只显示部门编号
SELECT deptno FROM emp GROUP BY deptno ORDER BY AVG(sal) DESC LIMIT 1;

方法二:

SELECT deptno FROM dept
WHERE deptno IN(
            SELECT b.deptno FROM (SELECT AVG(sal) avgsal,deptno FROM emp GROUP BY deptno) b
            WHERE
            b.avgsal IN(
                         SELECT MAX(a.avgsal)FROM (SELECT AVG(sal) avgsal,deptno FROM emp GROUP BY deptno) a));
-- e)    部门平均薪水最高的部门名称:

有两种方法:

方法一:利用分页

-- 1、查询各部门的平均薪水,并进行降序排序
SELECT deptno, AVG(sal) avgsal FROM emp GROUP BY deptno ORDER BY avgsal DESC ;
-- 2、分页查询,取出第一行数据,即最高的平均薪水部门编号
SELECT deptno, AVG(sal) avgsal FROM emp GROUP BY deptno ORDER BY avgsal DESC LIMIT 1;
-- 3、将上面的查询结果当做一张表,联合部门表,查询最终结果
SELECT dname FROM dept d WHERE d.deptno = (
            SELECT deptno FROM emp GROUP BY deptno ORDER BY AVG(sal) DESC LIMIT 1);

方法二:

SELECT dname FROM dept
WHERE
deptno IN(
            SELECT b.deptno FROM (SELECT AVG(sal) avgsal,deptno FROM emp GROUP BY deptno) b
            WHERE
                b.avgsal IN(
                        SELECT MAX(a.avgsal)FROM (SELECT AVG(sal) avgsal,deptno FROM emp GROUP BY deptno) a));
-- f)    平均薪水最低的部门的部门名称:

有两种方法:

方法一:利用分页

-- 1、查询各部门的平均薪水,并进行升序排序
SELECT deptno, AVG(sal) avgsal FROM emp GROUP BY deptno ORDER BY avgsal ;
-- 2、分页查询,取出第一行数据,即最低的平均薪水部门编号
SELECT deptno, AVG(sal) avgsal FROM emp GROUP BY deptno ORDER BY avgsal LIMIT 1;
-- 3、将上面的查询结果当做一张表,联合部门表,查询最终结果
SELECT dname FROM dept d WHERE d.deptno = (
            SELECT deptno FROM emp GROUP BY deptno ORDER BY AVG(sal)  LIMIT 1);

方法二:

SELECT dname FROM dept
WHERE
deptno IN(
            SELECT b.deptno FROM (SELECT AVG(sal) avgsal,deptno FROM emp GROUP BY deptno) b
            WHERE
            b.avgsal IN(
                       SELECT MIN(a.avgsal)FROM (SELECT AVG(sal) avgsal,deptno FROM emp GROUP BY deptno) a));
-- g)    平均薪水等级最低的部门的部门名称:
SELECT d.dname FROM dept d
WHERE 
d.deptno IN
            (SELECT a.deptno FROM (SELECT e.deptno FROM emp e,salgrade s
                                   WHERE (e.sal BETWEEN s.losal AND s.hisal)GROUP BY e.deptno ORDER BY avg(s.grade)) a) LIMIT 1;
-- h)    部门经理人中,薪水最低的部门名称:

方法一:

-- 1、查询部门经理的薪水及其所属的部门编号
SELECT deptno,job,MIN(sal) FROM emp WHERE job = 'manager' GROUP BY deptno;
-- 2、分页查询,升序排列,只显示第一行数据,即工资最低的部门经理
SELECT deptno FROM emp  WHERE job = 'manager' GROUP BY deptno ORDER BY MIN(sal) LIMIT 1 ;
-- 3、将上面结果当做一张表,联合部门表
SELECT dname FROM dept d WHERE d.deptno = (
                SELECT deptno FROM emp  WHERE job = 'manager' GROUP BY deptno ORDER BY MIN(sal) LIMIT 1 );

方法二:

select dname from dept d where d.deptno IN

(select deptno from emp where job='MANAGER' group by deptno order by min(sal));
-- i)    比普通员工的最高薪水还要高的经理人名称:
-- 1、查询普通员工的最高薪水
SELECT MAX(sal) FROM emp WHERE job NOT IN('manager','president');
-- 2、查询
SELECT ename,sal FROM emp 
    WHERE  sal >(SELECT MAX(sal) FROM emp WHERE job NOT IN('manager','president'))
        AND job = 'manager' OR job = 'president';

五:嵌套子查询

-- a)    查询所有【员工工资都大于1000】的部门的信息:
            -- 1、查询员工工资小于1000的员工编号,及其部门编号
            SELECT deptno FROM emp WHERE sal < 1000 GROUP BY deptno;
            -- 2、将上面的查询结果当做一张表,查询部门编号不在里面的部门编号
            SELECT d.* FROM dept d 
            WHERE d. deptno NOT IN(SELECT deptno FROM emp WHERE s
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇oracle学习笔记(七) 预编译Stat.. 下一篇MySQL命令窗口下中文显示乱码的解..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目