【员工的直属部门】

        欢迎来到 SQL 语句使用指南的专栏!📊 无论你是刚接触数据库的新手,还是希望精进技能的开发者,这里都能为你提供实用的 SQL 知识与技巧。​

        SQL 作为数据查询与管理的核心语言,早已成为后端开发、数据分析、运维等岗位的必备技能。从简单的单表查询到复杂的多表关联,从数据筛选到聚合分析,掌握 SQL 不仅能提升工作效率,更能帮你从海量数据中挖掘有价值的信息🔍。​

        在这个专栏里,我们会从基础语法讲起,逐步深入到高级用法。你将学到如何通过 JOIN 语句实现多表关联查询,如何用子查询解决复杂逻辑,如何优化 SQL 性能以应对大数据量场景…… 每一篇文章都会搭配具体案例,让抽象的语法变得通俗易懂💡。​

        无论你是想解决工作中遇到的 SQL 难题,还是为面试做准备,都不妨跟着我们的节奏一步步探索。如果在学习过程中有任何疑问,欢迎在评论区留言交流,让我们一起在实践中成长,真正做到学以致用,让 SQL 成为你职业生涯中的得力工具🚀!

目录

一.题目描述

二.解题思路

三.代码

四.重点掌握

1.union操作符


一.题目描述

表: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'.

请编写解决方案,查出员工所属的直属部门。

返回结果 没有顺序要求 。

返回结果格式如下例子所示:

示例 1:

输入:
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            |
+-------------+---------------+--------------+
输出:
+-------------+---------------+
| employee_id | department_id |
+-------------+---------------+
| 1           | 1             |
| 2           | 1             |
| 3           | 3             |
| 4           | 3             |
+-------------+---------------+
解释:
- 员工 1 的直属部门是 1
- 员工 2 的直属部门是 1
- 员工 3 的直属部门是 3
- 员工 4 的直属部门是 3

二.解题思路

①先找出加了多个部门的员工的直属部门

②再找出只加了一个部门的员工(该部门默认为该员工的直属部门)

③通过union操作符,将上面两个结果集,合在一块,构成最终的结果

三.代码

-- 找出加多个部门的员工的直属部门
select employee_id, department_id 
from Employee 
where primary_flag = 'Y'

union

-- 找只加了一个部门的员工(该部门默认为直属部门)
select employee_id, department_id 
from Employee 
group by employee_id 
having count(employee_id) = 1

四.重点掌握

1.union操作符

  • 合并结果集UNION 将多个查询的结果合并为一个结果集
  • 去重:默认情况下,UNION 会自动去除重复的行
  • 列数相同:所有联合的查询必须具有相同数量的列
  • 数据类型兼容:对应列的数据类型必须兼容


 

以上就是【员工的直属部门】问题的全部解题过程,希望可以帮到你,喜欢的话可以留个免费的关注哟~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值