本文主要是介绍LeetCode-----569. 员工薪水中位数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目解析: --中位数:按顺序排列的一组数据中居于中间位置的数----顺序和居中
--中位数的解决办法(+1,+2向下取整)----row_number()排序,count()计算总的个数n,根据+1向下取整(floor((n+1)/2))和+2 向下取整数(floor((n+2)/2))来处理
Employee
表包含所有员工。Employee
表有三列:员工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 | +-----+------------+--------+
--中位数:按顺序排列的一组数据中居于中间位置的数----顺序和居中
--中位数的解决办法(+1,+2向下取整)----row_number()排序,count()计算总的个数n,根据+1向下取整(floor((n+1)/2))和+2 向下取整数(floor((n+2)/2))来处理
select Id,Company,Salary
from (
select Id,Company,Salary,
ROW_NUMBER() over(partition by Company order by Salary) rk,
count(*) over(partition by Company) cnt
from Employee
)t1
where rk IN (FLOOR((cnt + 1)/2), FLOOR((cnt + 2)/2))
这篇关于LeetCode-----569. 员工薪水中位数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!