当前位置:   article > 正文

LeetCode-SQL-569. 员工薪水中位数_编写sql查找每个公司的薪水中位数

编写sql查找每个公司的薪水中位数

sql架构

  1. Create table If Not Exists Employee (Id int, Company varchar(255), Salary int)
  2. Truncate table Employee
  3. insert into Employee (Id, Company, Salary) values ('1', 'A', '2341')
  4. insert into Employee (Id, Company, Salary) values ('2', 'A', '341')
  5. insert into Employee (Id, Company, Salary) values ('3', 'A', '15')
  6. insert into Employee (Id, Company, Salary) values ('4', 'A', '15314')
  7. insert into Employee (Id, Company, Salary) values ('5', 'A', '451')
  8. insert into Employee (Id, Company, Salary) values ('6', 'A', '513')
  9. insert into Employee (Id, Company, Salary) values ('7', 'B', '15')
  10. insert into Employee (Id, Company, Salary) values ('8', 'B', '13')
  11. insert into Employee (Id, Company, Salary) values ('9', 'B', '1154')
  12. insert into Employee (Id, Company, Salary) values ('10', 'B', '1345')
  13. insert into Employee (Id, Company, Salary) values ('11', 'B', '1221')
  14. insert into Employee (Id, Company, Salary) values ('12', 'B', '234')
  15. insert into Employee (Id, Company, Salary) values ('13', 'C', '2345')
  16. insert into Employee (Id, Company, Salary) values ('14', 'C', '2645')
  17. insert into Employee (Id, Company, Salary) values ('15', 'C', '2645')
  18. insert into Employee (Id, Company, Salary) values ('16', 'C', '2652')
  19. insert into Employee (Id, Company, Salary) values ('17', 'C', '65')
  1. SELECT
  2. Employee.Id, Employee.Company, Employee.Salary
  3. FROM
  4. Employee,
  5. Employee alias
  6. WHERE
  7. Employee.Company = alias.Company
  8. GROUP BY Employee.Company , Employee.Salary
  9. HAVING SUM(CASE
  10. WHEN Employee.Salary = alias.Salary THEN 1
  11. ELSE 0
  12. END) >= ABS(SUM(SIGN(Employee.Salary - alias.Salary)))
  13. ORDER BY Employee.Id
  14. ;

 

  1. SELECT
  2. Id, Company, Salary
  3. FROM
  4. (SELECT
  5. e.Id,
  6. e.Salary,
  7. e.Company,
  8. IF(@prev = e.Company, @Rank:=@Rank + 1, @Rank:=1) AS rank,
  9. @prev:=e.Company
  10. FROM
  11. Employee e, (SELECT @Rank:=0, @prev:=0) AS temp
  12. ORDER BY e.Company , e.Salary , e.Id) Ranking
  13. INNER JOIN
  14. (SELECT
  15. COUNT(*) AS totalcount, Company AS name
  16. FROM
  17. Employee e2
  18. GROUP BY e2.Company) companycount ON companycount.name = Ranking.Company
  19. WHERE
  20. Rank = FLOOR((totalcount + 1) / 2)
  21. OR Rank = FLOOR((totalcount + 2) / 2)
  22. ;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/552600
推荐阅读
相关标签
  

闽ICP备14008679号