mysql的一些題目,有難度
阿新 • • 發佈:2019-01-06
mysql的一些題目,有難度
案例題目,有些題目有難度,自己動手,豐衣足食!
直接po程式碼
#案例題目 # 1. 查詢工資最低的員工資訊: last_name, salary SELECT last_name, salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees) ; # 2. 查詢平均工資最低的部門資訊 #每個部門的平均工資 SELECT * FROM (SELECT AVG(salary) AS avg_sal, department_id FROM employees GROUP BY department_id) AS emp; #所有部門中,平均工資最低的 SELECT MIN(emp.avg_sal) FROM (SELECT AVG(salary) AS avg_sal, department_id FROM employees GROUP BY department_id) AS emp; # SELECT AVG(salary) AS avg_sal, department_id FROM employees GROUP BY department_id HAVING AVG(salary) = ( SELECT MIN(emp.avg_sal) FROM (SELECT AVG(salary) AS avg_sal, department_id FROM employees GROUP BY department_id) AS emp); # SELECT dep.* FROM departments dep WHERE department_id = ( SELECT department_id FROM employees GROUP BY department_id HAVING AVG(salary) = ( SELECT MIN(emp.avg_sal) FROM (SELECT AVG(salary) AS avg_sal, department_id FROM employees GROUP BY department_id) AS emp)); #有好多種寫法 #方式一 SELECT department_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id ORDER BY avg_sal ASC LIMIT 0, 1; #或者 SELECT department_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id ORDER BY avg_sal ASC LIMIT 1; #方式二 SELECT * FROM (SELECT department_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id) AS emp01 INNER JOIN (SELECT MIN(avg_sal_emp.avg_sal) AS min_sal FROM ( SELECT AVG(salary) AS avg_sal FROM employees GROUP BY department_id) AS avg_sal_emp) emp02 ON emp01.avg_sal = emp02.min_sal; # SELECT * FROM departments WHERE department_id = ( SELECT department_id FROM (SELECT department_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id) AS emp01 INNER JOIN (SELECT MIN(avg_sal_emp.avg_sal) AS min_sal FROM ( SELECT AVG(salary) AS avg_sal FROM employees GROUP BY department_id) AS avg_sal_emp) emp02 ON emp01.avg_sal = emp02.min_sal); # 3. 查詢平均工資最低的部門資訊和該部門的平均工資 SELECT dep.*, avg_dep.avg_sal FROM departments dep INNER JOIN (SELECT department_id AS dep_id, AVG(salary) AS avg_sal FROM employees GROUP BY department_id ORDER BY avg_sal ASC LIMIT 0, 1) AS avg_dep ON dep.department_id = avg_dep.dep_id; # SELECT dep.*, (SELECT AVG(salary) AS avg_sal FROM employees emp WHERE emp.department_id = dep.`department_id` GROUP BY department_id ORDER BY avg_sal ASC LIMIT 0, 1) AS avg_salary FROM departments dep; #select後面僅僅支援標量子查詢(標量子查詢即結果集只有一行一列,又叫做單行子查詢) #最終效果(有難度) SELECT dep.*, (SELECT AVG(salary) AS avg_sal FROM employees emp WHERE emp.department_id = dep.`department_id` GROUP BY department_id ORDER BY avg_sal ASC LIMIT 0, 1) AS avg_salary FROM departments dep HAVING avg_salary IS NOT NULL ORDER BY avg_salary ASC LIMIT 0, 1; # 4. 查詢平均工資最高的 job 資訊 SELECT AVG(salary) AS avg_sal,job_id FROM employeeS GROUP BY job_id ORDER BY avg_sal DESC LIMIT 0, 1; # SELECT * FROM jobs WHERE job_id = ( SELECT job_id FROM employees GROUP BY job_id ORDER BY AVG(salary) DESC LIMIT 0, 1); # 5. 查詢平均工資高於公司平均工資的部門有哪些? SELECT AVG(salary) AS avg_dep,department_id FROM employees GROUP BY department_id HAVING avg_dep >( SELECT AVG(salary) FROM employees); # 6. 查詢出公司中所有 manager 的詳細資訊. SELECT * FROM employees WHERE employee_id IN ( SELECT DISTINCT manager_id FROM employees emp); #或者使用ANY SELECT * FROM employees WHERE employee_id = ANY ( SELECT DISTINCT manager_id FROM employees emp); # 7. 各個部門中 最高工資中最低的那個部門的 最低工資是多少 SELECT MIN(salary) FROM employees WHERE department_id = ( SELECT department_id FROM employees GROUP BY department_id ORDER BY MAX(salary) ASC LIMIT 0, 1); #select min(salary) from employees where department_id = 10; #select * from employees where department_id = 10; # 8. 查詢平均工資最高的部門的 manager 的詳細資訊: last_name, department_id, email, salary # SELECT AVG(salary) AS avg_sal, department_id FROM employees GROUP BY department_id ORDER BY avg_sal DESC LIMIT 0, 1; #最終效果 SELECT employee_id, last_name, department_id, email, salary FROM employees WHERE employee_id IN ( SELECT DISTINCT manager_id FROM employees WHERE department_id = ( SELECT department_id FROM employees GROUP BY department_id ORDER BY AVG(salary) DESC LIMIT 0, 1 )); #最終效果 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) ; #