文章目录
- 1. 查询工资最低的员工信息: last_name, salary
- 2. 查询平均工资最低的部门信息
- 3. 查询平均工资最低的部门信息和该部门的平均工资
- 4. 查询平均工资最高的 job 信息
- 5. 查询平均工资高于公司平均工资的部门有哪些?
- 6. 查询出公司中所有 manager 的详细信息.
- 7. 各个部门中 最高工资中最低的那个部门的 最低工资是多少
- 8. 查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary
子查询作为该系列第二章较难的一部分,需要有一定的思考分析。因此,本文找了一些经典的子查询案例,并写了相应的思路分享给大家。
1. 查询工资最低的员工信息: last_name, salary
首先对子查询类型进行判断,此题需要查询工资最低的员工,因此需要增加筛选条件,故使用where子查询。
SELECT last_name,salary
FROM employees
WHERE salary=(
SELECT MIN(salary)
FROM employees
);
2. 查询平均工资最低的部门信息
这个题需要我们先求出按部门分组的平均工资,并找出最低的部门查询其信息,如果使用传统的思路较为繁琐,这里使用排序对工资进行排序后得到部门id。当问题较为复杂,首先对其进行分解。以本题为例,先计算平均工资
①各部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
②求出最低平均工资的部门编号
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1;
③查询部门信息
SELECT *
FROM departments
WHERE department_id=(
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1
);
3. 查询平均工资最低的部门信息和该部门的平均工资
SELECT d.*,ag
FROM departments d
JOIN (
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1
) ag_dep
ON d.`department_id`=ag_dep.department_id;
4. 查询平均工资最高的 job 信息
SELECT *
FROM jobs
WHERE job_id=(
SELECT job_id
FROM employees
GROUP BY job_id
ORDER BY AVG(salary) DESC
LIMIT 1
);
5. 查询平均工资高于公司平均工资的部门有哪些?
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary)>(
SELECT AVG(salary)
FROM employees
);
6. 查询出公司中所有 manager 的详细信息.
SELECT *
FROM employees
WHERE employee_id =ANY(
SELECT DISTINCT manager_id
FROM employees
);
7. 各个部门中 最高工资中最低的那个部门的 最低工资是多少
SELECT MIN(salary) ,department_id
FROM employees
WHERE department_id=(
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY MAX(salary)
LIMIT 1
);
8. 查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary
SELECT
last_name, d.department_id, email, salary
FROM
employees e
INNER JOIN departments d
ON d.manager_id = e.employee_id
WHERE d.department_id =
(SELECT
department_id
FROM
employees
GROUP BY department_id
ORDER BY AVG(salary) DESC
LIMIT 1) ;