MySQL基础练习题24-员工的直属部门

目录

题目

准备数据

分析数据


题目

一个员工可以属于多个部门。当一个员工加入超过一个部门的时候,他需要决定哪个部门是他的直属部门。请注意,当员工只加入一个部门的时候,那这个部门将默认为他的直属部门,虽然表记录的值为'N'。查出员工所属的直属部门。

准备数据

## 创建库
create database db;
use db;

## 创建表
Create table If Not Exists Employee (employee_id int, department_id int, primary_flag ENUM('Y','N'));

## 向表中插入数据
Truncate table Employee;
insert into Employee (employee_id, department_id, primary_flag) values ('1', '1', 'N');
insert into Employee (employee_id, department_id, primary_flag) values ('2', '1', 'Y');
insert into Employee (employee_id, department_id, primary_flag) values ('2', '2', 'N');
insert into Employee (employee_id, department_id, primary_flag) values ('3', '3', 'N');
insert into Employee (employee_id, department_id, primary_flag) values ('4', '2', 'N');
insert into Employee (employee_id, department_id, primary_flag) values ('4', '3', 'Y');
insert into Employee (employee_id, department_id, primary_flag) values ('4', '4', 'N');

 employee表

分析数据

分析两种结果:

(1)只属于一个部门,不管表记录是什么,都是直属部门。使用count(*)=1

(2)当属于多个部门,选择登记表为“Y”的。

 第一步:先用开窗函数根据员工id统计有几个部门 

## 第一步:先用开窗函数根据员工id统计有几个部门
select employee_id,
       department_id,
       primary_flag,
       count(*) over(partition by employee_id) as cn
       from employee;

 

第二步:将两种情况都算进去,只要满足一个就行

## 第二步:将两种情况都算进去,只要满足一个就行
select employee_id,department_id from (
                                          select employee_id,
                                                 department_id,
                                                 primary_flag,
                                                 count(*) over(partition by employee_id) as cn
                                          from employee
                                      ) t
where t.cn = 1 or primary_flag = 'y';

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值