首页 > 其他分享 >1789. 员工的直属部门

1789. 员工的直属部门

时间:2023-07-04 20:46:16浏览次数:48  
标签:直属 1789 Employee 员工 department flag employee id select

1789. 员工的直属部门

SQL架构

Table: Employee

+---------------+---------+
| Column Name   |  Type   |
+---------------+---------+
| employee_id   | int     |
| department_id | int     |
| primary_flag  | varchar |
+---------------+---------+
这张表的主键为 employee_id, department_id
employee_id 是员工的ID
department_id 是部门的ID,表示员工与该部门有关系
primary_flag 是一个枚举类型,值分别为('Y', 'N'). 如果值为'Y',表示该部门是员工的直属部门。 如果值是'N',则否

 

一个员工可以属于多个部门。

当一个员工加入超过一个部门的时候,他需要决定哪个部门是他的直属部门。

请注意,当员工只加入一个部门的时候,那这个部门将默认为他的直属部门,虽然表记录的值为'N'.

请编写一段SQL,查出员工所属的直属部门。

返回结果没有顺序要求。

 

示例:

Employee table:
+-------------+---------------+--------------+
| employee_id | department_id | primary_flag |
+-------------+---------------+--------------+
| 1           | 1             | N            |
| 2           | 1             | Y            |
| 2           | 2             | N            |
| 3           | 3             | N            |
| 4           | 2             | N            |
| 4           | 3             | Y            |
| 4           | 4             | N            |
+-------------+---------------+--------------+

Result table:
+-------------+---------------+
| employee_id | department_id |
+-------------+---------------+
| 1           | 1             |
| 2           | 1             |
| 3           | 3             |
| 4           | 3             |
+-------------+---------------+
- 员工1的直属部门是1
- 员工2的直属部门是1
- 员工3的直属部门是3
- 员工4的直属部门是3

分两种情况进行连接,上面的为只有一个部门的,下面的为有多个部门的
(select distinct employee_id,department_id
from Employee
where (employee_id) not in (
    select 
    employee_id
from
    Employee
where 
    primary_flag = 'Y'
))

union

(select distinct
    employee_id,
    department_id
from
    Employee
where 
    primary_flag = 'Y')

1,用union把只有1个部门的员工和属于主要部门的员工做联合

select employee_id,department_id from Employee
group by 1 having count(1) = 1
union
select employee_id,department_id from Employee
where primary_flag = 'Y'

2,创建一张公用表t,选出flag=Y或计数项cnt=1的员工

with t as(
    select *,count(1) over(partition by employee_id) cnt
    from Employee
)
select employee_id,department_id from t where primary_flag='Y' or cnt=1

3,根据员工id以flag进行组内排序选出rk为1的即可

with t as(
    select *,row_number() over(partition by employee_id order by primary_flag) rk
    from Employee
)
select employee_id,department_id from t where rk = 1

 4.将所有有多个部门的非直属部门排除掉

select employee_id,department_id from Employee 
where (employee_id,primary_flag) not in
 (select employee_id,'N' from Employee where primary_flag='Y')

 

标签:直属,1789,Employee,员工,department,flag,employee,id,select
From: https://www.cnblogs.com/fulaien/p/17526935.html

相关文章

  • 第五天(登录+拦截器,员工列表实现,添加员工实现,员工信息修改,删除员工实现)
    登录+拦截器员工列表实现标蓝添加员工实现员工信息修改删除员工实现404及注销......
  • 数据代码分享|R语言lasso回归、贝叶斯分析员工满意度调查数据、缺失值填充
    全文链接:https://tecdat.cn/?p=33055原文出处:拓端数据部落公众号员工满意度对于组织绩效和竞争力具有重要影响,因此准确了解员工满意度的影响因素和有效管理成为管理者的关键任务。而员工满意度调查是常用的研究方法之一,通过收集员工的反馈数据来了解他们的期望、需求和感受。本......
  • 185. 部门工资前三高的所有员工
    185.部门工资前三高的所有员工SQL架构表: Employee+--------------+---------+|ColumnName|Type|+--------------+---------+|id|int||name|varchar||salary|int||departmentId|int|+--------------......
  • 职场员工有没有潜力,看这一个能力就够了
    在我组织的研讨会上,讲故事的课程通常以一个思考练习开始。我会让参与者闭上眼睛回忆《小红帽》的故事,尤其考虑其中的情节、起伏和结尾。这个练习有时会引发一阵笑声,人们会好奇这与课程有什么相关性,或者干脆把《小红帽》与《三只小猪》的故事混淆了。但我发现绝大部分参与者(根据举手......
  • 02 CRUD员工
    完善登录功能问题因为可以没有登录就直接跳转到index页面,所以我们必须要增加一个拦截器或者过滤器,在过滤器中判断用户是否已经完成登录,只有登录成功后才可以访问系统中的页面。代码实现先在reggie下创建一个filter包,新建一个LoginCheckFilter类:packagecom.itheima.reg......
  • 2023年程序员工资中位数增长10%?开发者最常用的语言竟然是……
    在调研了全球超过90000名开发者之后,程序员社区StackOverflow重磅发布了《2023DeveloperSurvey》调查报告。在本次报告中,StackOverflow从工具、编码、工作、社区等维度展开,同时深入研究了AI/ML技术,并解析开发者如何在工作流程中使用这些技术。接下来,我们将通过这份报告......
  • 《C++》员工管理系统
    学习差不多了,来小项目已经做两个晚上了目前只实现了批量添加和显示,数据结构采用链表......
  • 企业数智化转型数智员工到底能做什么?
    随着数字技术的不断成熟和应用,数据分析、数智员工、产业互联等应用场景正发挥越来越重要的作用。随着ChatGPT的爆火,数智员工迅速进入大众视野。揭开数智员工的真面目常见的数字员工主要分为两大类,一类是虚拟数字人,如基于“元宇宙”概念的虚拟数字人技术,他们拥有真人般的面部表情、......
  • 客户案例:如何让企业员工远离网络钓鱼邮件陷阱?
    客户背景某大型餐饮企业是一家在全国范围内拥有多家连锁店的知名品牌,以优秀的产品和服务质量,严格的质量控制和管理体系,以及开创性的营销策略,赢得了广泛的客户认可和信任。而餐饮企业往往拥有多个分支机构和门店,员工数量较多且流动性大,二次认证等账号保护手段无法推行,此外员工安全意......
  • 【mysql】1378. 使用唯一标识码替换员工ID
    题目:Employees表:±--------------±--------+|ColumnName|Type|±--------------±--------+|id|int||name|varchar|±--------------±--------+id是这张表的主键。这张表的每一行分别代表了某公司其中一位员工的名字和ID。EmployeeUNI表:±--------......