如何编写一个查询来返回不超过5人工作的部门中经理的id?
我有一个数据表员工
id integer- id员工
name char- name employee
department_id integer-员工所在部门的id
chief_flg boolean-员工处于领导职位的标志
birth_dt date-出生日期
薪资整数-员工薪资
我试着写这样的查询(PostgreSQL),但我认为你可以通过HAVING做一些事情
SELECT COUNT(e.id)<5, e.id as id_column
FROM employee AS e
WHERE chief_flg = 'True'
GROUP BY e.id
2条答案
按热度按时间92vpleto1#
您的查询,不需要有:
而不是加入内部选择,即计算部门中的员工数量。
qf9go6mv2#
有几种不同的方法可以做到这一点。可以考虑的一种方法是:
基本思想是将主管(
c.chief_flag = True
)加入到同一个部门(c.department_id = e.department_id
)的所有员工中。如您所建议的,然后可以使用HAVING COUNT(e.id) <= 5
限制为5个或更少员工的部门。一个可能更容易遵循的替代方案(尽管可能性能较低):
这将获取所有具有
chief_flag = True
的行,并检查其部门中的员工数量是否为5或更少。另一个选项类似于:
这类似于此问题的另一个答案(计算每个部门的员工数量),但在子查询中使用了一个窗口函数。
你现有的尝试将不起作用(即使你清理语法),因为你只查看一次表,并限制为
chief_flg = 'True'
。一旦你将查询限制为只考虑酋长,你就没有办法计算其他雇员。这就是为什么大多数解决方案要么连接,使用子查询,要么使用窗口函数。