Leetcode力扣 MySQL数据库 569.员工薪水中位数

569.员工薪水中位数


SQL架构

Create table If Not Exists Employee_569 (Id int, Company varchar(255), Salary int);
Truncate table Employee_569;
insert into Employee_569 (Id, Company, Salary) values ('1', 'A', '2341');
insert into Employee_569 (Id, Company, Salary) values ('2', 'A', '341');
insert into Employee_569 (Id, Company, Salary) values ('3', 'A', '15');
insert into Employee_569 (Id, Company, Salary) values ('4', 'A', '15314');
insert into Employee_569 (Id, Company, Salary) values ('5', 'A', '451');
insert into Employee_569 (Id, Company, Salary) values ('6', 'A', '513');
insert into Employee_569 (Id, Company, Salary) values ('7', 'B', '15');
insert into Employee_569 (Id, Company, Salary) values ('8', 'B', '13');
insert into Employee_569 (Id, Company, Salary) values ('9', 'B', '1154');
insert into Employee_569 (Id, Company, Salary) values ('10', 'B', '1345');
insert into Employee_569 (Id, Company, Salary) values ('11', 'B', '1221');
insert into Employee_569 (Id, Company, Salary) values ('12', 'B', '234');
insert into Employee_569 (Id, Company, Salary) values ('13', 'C', '2345');
insert into Employee_569 (Id, Company, Salary) values ('14', 'C', '2645');
insert into Employee_569 (Id, Company, Salary) values ('15', 'C', '2645');
insert into Employee_569 (Id, Company, Salary) values ('16', 'C', '2652');
insert into Employee_569 (Id, Company, Salary) values ('17', 'C', '65');


Employee 表包含所有员工。Employee_569 表有三列:员工Id,公司名和薪水。
+-----+------------+--------+
|Id   | Company    | Salary |
+-----+------------+--------+
|1    | A          | 2341   |
|2    | A          | 341    |
|3    | A          | 15     |
|4    | A          | 15314  |
|5    | A          | 451    |
|6    | A          | 513    |
|7    | B          | 15     |
|8    | B          | 13     |
|9    | B          | 1154   |
|10   | B          | 1345   |
|11   | B          | 1221   |
|12   | B          | 234    |
|13   | C          | 2345   |
|14   | C          | 2645   |
|15   | C          | 2645   |
|16   | C          | 2652   |
|17   | C          | 65     |
+-----+------------+--------+
请编写SQL查询来查找每个公司的薪水中位数。

挑战点:你是否可以在不使用任何内置的SQL函数的情况下解决此问题。

+-----+------------+--------+
|Id   | Company    | Salary |
+-----+------------+--------+
|5    | A          | 451    |
|6    | A          | 513    |
|12   | B          | 234    |
|9    | B          | 1154   |
|14   | C          | 2645   |
+-----+------------+--------+
​*/
解题

select Id, Company, Salary
from
    (select *,
            row_number() over (partition by Company order by Salary) rnk,
            count(*) over (partition by Company) num
    from Employee_569) t
where rnk in (floor((num + 1) / 2), floor(num + 2) / 2);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziko-1101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值