hope you can learn and enjoy ????

最近关注了一个公众号,该公众号主要围绕着数据库为技术主线展开,里面有每日一题

  • T0716 表包含所有员工,其中有三列:员工 Id,公司名和薪水。
ID Company Salary
1 A 8341
2 A 9410
3 A 10050
4 A 15314
5 A 8451
6 A 9513
7 B 10005
8 B 13000
9 B 11540
10 B 10345
11 B 12210
12 B 9234
13 C 12000
14 C 8900
15 C 9000
16 C 10100
17 C 8000
  • 现在 的需求是求每个公司的工资的中位数

需求结果如下:

ID Company Salary
6 A 9513
2 A 9410
9 B 11540
10 B 10345
15 C 9000

代码实现:

CREATE TABLE T0716
(
ID INT,
Company VARCHAR(10),
Salary INT
);


INSERT INTO T0716 VALUES
(1,'A',8341),
(2,'A',9410),
(3,'A',10050),
(4,'A',15314),
(5,'A',8451),
(6,'A',9513),
(7,'B',10005),
(8,'B',13000),
(9,'B',11540),
(10,'B',10345),
(11,'B',12210),
(12,'B',9234),
(13,'C',12000),
(14,'C',8900),
(15,'C',9000),
(16,'C',10100),
(17,'C',8000)

查询语句如下:

  • 创建临时表
  • 根据中位数的条件判断筛选出合适的记录
WITH temp AS (
SELECT a.*,ROW_NUMBER() over (PARTITION BY company ORDER BY Salary DESC) paiming,count(1) over (PARTITION BY company) num FROM t0716 a)
SELECT a.ID,a.Company,a.Salary FROM temp a WHERE paiming=round(num/2,0) OR (paiming=round(num/2)+1 AND num % 2=0)


相关文章:

  • 2022-12-23
  • 2021-11-19
  • 2022-12-23
  • 2021-08-08
  • 2021-09-03
  • 2021-11-11
  • 2022-12-23
  • 2021-10-25
猜你喜欢
  • 2021-06-02
  • 2021-09-16
  • 2022-02-17
  • 2021-11-08
  • 2021-09-12
  • 2021-12-19
  • 2022-12-23
相关资源
相似解决方案