- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
Salaries
表:+---------------+---------+ | Column Name | Type | +---------------+---------+ | company_id | int | | employee_id | int | | employee_name | varchar | | salary | int | +---------------+---------+ 在 SQL 中,(company_id, employee_id) 是这个表的主键 这个表包括员工的company id, id, name 和 salary查找出每个员工的税后工资
每个公司的税率计算依照以下规则
- 如果这个公司员工最高工资不到
$1000
,税率为0%
- 如果这个公司员工最高工资在
[1000, 10000]
之间,税率为24%
- 如果这个公司员工最高工资大于
$10000
,税率为49%
按 任意顺序 返回结果。
返回结果的格式如下例所示。
示例 1:
输入: Salaries 表: +------------+-------------+---------------+--------+ | company_id | employee_id | employee_name | salary | +------------+-------------+---------------+--------+ | 1 | 1 | Tony | 2000 | | 1 | 2 | Pronub | 21300 | | 1 | 3 | Tyrrox | 10800 | | 2 | 1 | Pam | 300 | | 2 | 7 | Bassem | 450 | | 2 | 9 | Hermione | 700 | | 3 | 7 | Bocaben | 100 | | 3 | 2 | Ognjen | 2200 | | 3 | 13 | Nyancat | 3300 | | 3 | 15 | Morninngcat | 7777 | +------------+-------------+---------------+--------+ 输出: +------------+-------------+---------------+--------+ | company_id | employee_id | employee_name | salary | +------------+-------------+---------------+--------+ | 1 | 1 | Tony | 1020 | | 1 | 2 | Pronub | 10863 | | 1 | 3 | Tyrrox | 5508 | | 2 | 1 | Pam | 300 | | 2 | 7 | Bassem | 450 | | 2 | 9 | Hermione | 700 | | 3 | 7 | Bocaben | 76 | | 3 | 2 | Ognjen | 1672 | | 3 | 13 | Nyancat | 2508 | | 3 | 15 | Morninngcat | 5911 | +------------+-------------+---------------+--------+ 解释: 对于公司 1,最高薪资为 21300。公司 1 的员工税率为 49%。 对于公司 2,最高薪资为 700。公司 2 的员工税率为 0%。 对于公司 3,最高薪资为 7777。公司 3 的员工税率为 24%。 薪资扣除税后的金额计算公式为:薪资 - (税率百分比 / 100) * 薪资 例如,Morninngcat(员工号 3,薪资为 7777)扣除税后的薪资为:7777 - 7777 * (24 / 100) = 7777 - 1866.48 = 5910.52,四舍五入为 5911。
三,建表语句
Create table If Not Exists Salaries (company_id int, employee_id int, employee_name varchar(13), salary int);
Truncate table Salaries;
insert into Salaries (company_id, employee_id, employee_name, salary) values ('1', '1', 'Tony', '2000');
insert into Salaries (company_id, employee_id, employee_name, salary) values ('1', '2', 'Pronub', '21300');
insert into Salaries (company_id, employee_id, employee_name, salary) values ('1', '3', 'Tyrrox', '10800');
insert into Salaries (company_id, employee_id, employee_name, salary) values ('2', '1', 'Pam', '300');
insert into Salaries (company_id, employee_id, employee_name, salary) values ('2', '7', 'Bassem', '450');
insert into Salaries (company_id, employee_id, employee_name, salary) values ('2', '9', 'Hermione', '700');
insert into Salaries (company_id, employee_id, employee_name, salary) values ('3', '7', 'Bocaben', '100');
insert into Salaries (company_id, employee_id, employee_name, salary) values ('3', '2', 'Ognjen', '2200');
insert into Salaries (company_id, employee_id, employee_name, salary) values ('3', '13', 'Nyancat', '3300');
insert into Salaries (company_id, employee_id, employee_name, salary) values ('3', '15', 'Morninngcat', '7777');
select * from Salaries;
四,分析
思路
表格大法
第一步:开窗,求出每个部门的最大薪资
第二步:case when语法 根据最大薪资给部门定税率,然后算出薪资乘以税率之后的薪水
第三步:映射指定的列,改名,输出
解题过程
pandas和MySQL实现上述表格代码逻辑
第一步:开窗,求出每个部门的最大薪资
在mysql
第二步:case when语法 根据最大薪资给部门定税率,然后算出薪资乘以税率之后的薪水
在mysql
第三步:映射指定的列,改名,输出
在mysql
五,SQL解答
with t1 as (
select
company_id, employee_id, employee_name, salary,
max(salary)over(partition by company_id) mo
from Salaries
)
# select * from t1;
,t2 as (
select
company_id, employee_id, employee_name, salary, mo,
case when mo<1000 then salary
when mo>=1000 and mo<=10000 then round(salary- salary*0.24)
when mo>10000 then round(salary - salary*0.49)
end as new_s
from t1
)
# select * from t2;
select company_id, employee_id, employee_name, new_s as salary from t2;
六,验证
七,知识点总结
- 开窗函数的运用
- case when语法的运用
- 四舍五入的运用
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用