每日sql-不同公司员工工资中位数

不同公司员工工资中位数

源数据
在这里插入图片描述
插入数据

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

中位数

SELECT
    e1.Id,e1.Company,e1.Salary
FROM
    (SELECT Id, Company, Salary, @rnk1:=if(@pre1=Company, @rnk1+1, 1) rnk, @pre1:=Company
    FROM Employee, (SELECT @rnk1:=0, @pre1:=null)init
    ORDER by Company, Salary, Id)e1 
    JOIN 
    (SELECT Id, Company, Salary, @rnk2:=if(@pre2=Company, @rnk2+1, 1) rnk, @pre2:=Company
    FROM Employee, (SELECT @rnk2:=0, @pre2:=null)init
    ORDER by Company, Salary DESC, Id DESC)e2
    on e1.Id=e2.Id
WHERE abs(e1.rnk - e2.rnk)<=1

数据为偶数的需要取平均值
在这里插入图片描述

单行数据取中位数

SELECT AVG(DISTINCT a.Salary) AS median_salary
FROM
 (SELECT a.Salary
  FROM Employee AS a, Employee AS b
  GROUP BY a.Salary
  HAVING SUM(CASE WHEN b.Salary >= a.Salary THEN 1 ELSE 0 END) >= COUNT(*) / 2 
  AND SUM(CASE WHEN b.Salary <= a.Salary THEN 1 ELSE 0 END) >= COUNT(*) / 2 ) AS a;
  

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值