仅当50号部门员工数超10时列出员工详情的SQL技术问询
满足条件才返回50号部门员工详情的SQL实现
嗨,作为SQL新手,这个需求其实很好实现,我给你两种实用的写法,都能达成"仅当50号部门员工数超过10人时才列出该部门员工详情"的目标,下面给你拆解清楚每一步逻辑:
方法一:直观的子查询判断法
这种写法逻辑直白,很适合新手理解:先统计50号部门的员工总数,再判断这个数是否大于10,满足条件就返回员工数据。
SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 50 AND (SELECT COUNT(*) FROM EMPLOYEES WHERE DEPARTMENT_ID = 50) > 10;
逻辑解释:
- 括号里的子查询
(SELECT COUNT(*) FROM EMPLOYEES WHERE DEPARTMENT_ID = 50)会先算出50号部门一共有多少员工 - 外层的
WHERE条件会先筛选出50号部门的员工,再加上子查询的判断——只有当部门总人数>10时,才会把这些员工记录返回给你
方法二:高效的窗口函数法(适合大数据量)
如果你的数据库支持窗口函数(比如Oracle、MySQL 8.0及以上、PostgreSQL这些主流数据库都支持),这种写法性能更好,只需要扫描一次表就能完成统计和筛选:
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID FROM ( SELECT *, COUNT(*) OVER (PARTITION BY DEPARTMENT_ID) AS dept_emp_count FROM EMPLOYEES WHERE DEPARTMENT_ID = 50 ) AS dept_50_emps WHERE dept_emp_count > 10;
逻辑解释:
- 内层的子查询会给50号部门的每一条员工记录,额外加上一个
dept_emp_count字段,这个字段的值就是整个50号部门的员工总数 - 外层查询再过滤掉
dept_emp_count≤10的情况,这样就只有当部门人数超过10时,才会返回所有员工的详情
小提示
- 注意检查你的
EMPLOYEES表中DEPARTMENT_ID字段有没有空值(NULL),如果有的话,统计的时候会被排除,可能影响结果 - 如果50号部门的员工数≤10,这两个查询都会返回空结果集,正好符合你"仅当满足条件才列出"的要求
内容的提问来源于stack exchange,提问作者J.M
相关产品推荐
相关产品推荐

