dept 部门表
字段
DEPTNO
部门编号
DNAME
部门名称
LOC
位置
emp 员工表
字段
EMPNO
员工编号
ENAME
员工名称
JOB
职位
MGR
上级
HIREDATE
入职时间
SAL
薪水
COMM
奖金
DEPTNO
部门编号
salgrade 薪水等级表
字段
GRADE
等级编号
LOSAL
最低薪水
HISAL
最高薪水
文件下载: https://download.csdn.net/download/eebaicai/12626751
第一步: 取得每个部门最高薪水 [按照部门编号分组求最大值]
SELECT deptno, MAX(sal) as maxsal FROM emp GROUP BY deptno;
第二步: 将上面的查询结果当作临时表t, t表和emp e表进行表连接
条件: t.deptno = e.deptno AND t.maxsal = e.sal
SELECT
e.ename,
t.*
FROM
emp e
JOIN (
SELECT
deptno,
MAX(sal) AS maxsal
FROM
emp
GROUP BY
deptno
) t ON t.deptno = e.deptno
AND t.maxsal = e.sal;
第一步: 找出部门的平均薪水 按照部门编号分组求平均值]
SELECT
deptno,
avg(sal) as avgsal
FROM
emp
GROUP BY
deptno;
第二步: 将上面的查询结果当作临时表t, t表和emp e表进行表连接
条件: t.deptno = e.deptno AND e.sal > t.avgsal
SELECT
e.ename,
e.sal,
t.*
FROM
emp e
JOIN (
SELECT
deptno,
avg(sal) AS avgsal
FROM
emp
GROUP BY
deptno
) t ON t.deptno = e.deptno
AND e.sal > t.avgsal;
(就是薪水等级的平均值)
第一步: 取得每个员工的薪水等级
SELECT
e.ename,
e.sal,
e.deptno,
s.grade
FROM
emp e
JOIN salgrade s ON e.sal BETWEEN s.losal
AND hisal
第二步: 在上面的基础之上,按部门编号分组,求等级的平均值
SELECT
e.ename,
e.sal,
e.deptno,
avg(s.grade)
FROM
emp e
JOIN salgrade s ON e.sal BETWEEN s.losal
AND hisal
GROUP BY
e.deptno;
第一步: 取得部门的平均薪水
SELECT
deptno,
avg(sal) as avgsal
FROM
emp
GROUP BY
deptno;
第二步: 将上面的查询结果当作临时表t, t表和salgrade s表进行表连接
条件: t.avgsal between s.losal and s.hisal
SELECT
s.grade,
t.*
FROM
salgrade s
JOIN (
SELECT
deptno,
avg(sal) AS avgsal
FROM
emp
GROUP BY
deptno
) t ON t.avgsal BETWEEN s.losal
AND s.hisal;
第一种: 按照薪水降序排列,取第一个
SELECT
sal
FROM
emp
ORDER BY
sal DESC
LIMIT 1;
第二种: 自连接
SELECT
a.sal
FROM
emp a
JOIN emp b ON a.sal < b.sal;
上面的结果,肯定没有5000的
然后
SELECT
sal
FROM
emp
WHERE
sal NOT IN (
SELECT DISTINCT
a.sal
FROM
emp a
JOIN emp b ON a.sal < b.sal
);
本文地址:https://blog.csdn.net/eebaicai/article/details/107372268
如对本文有疑问, 点击进行留言回复!!
存在时更新 不存在时新增:merge into using(071问题)
mysql大量的waiting for table level lock怎么办
Leetcode database 刷题 MySQL 简单部分
网友评论