Employee 表包含所有员工。Employee 表有三列:员工Id,公司名和薪水。
IdCompanySalary1A23412A3413A154A153145A4516A5137B158B139B115410B134511B122112B13413C134514C264515C264516C265217C65请编写SQL查询来查找每个公司的薪水中位数。
挑战点:你是否可以在不使用任何内置的SQL函数的情况下解决此问题。
IdCompanySalary15A4516A51312B2349B115414C2645第一步:
创建两个新的column:一个在每个company中排序,产生row number; 另一个column是count这个company有多少员工。
# MySQL SELECT `Id`,`Company`,`Salary` , ROW_NUMBER () OVER (PARTITION BY `Company` ORDER BY `Salary` ASC,`Id` ASC) AS row_num, COUNT(`Id`) OVER (PARTITION BY `Company`) AS count_id FROM `employee`;结果 第二步:
使用FLOOR()函数计算row_number = 中位数。
# MySQL SELECT e.`Id`,e.`Company`,e.`Salary` FROM ( SELECT `Id`,`Company`,`Salary`, ROW_NUMBER() OVER (PARTITION BY `Company` ORDER BY `Salary` ASC, `Id` ASC) AS row_num, COUNT(`Id`) OVER (PARTITION BY `Company`) AS count_id FROM `employee` ) AS e WHERE e.row_num IN (FLOOR((e.count_id + 1)/2), FLOOR((e.count_id + 2)/2));结果
来源:力扣(LeetCode)
上一题:部门工资前三高的所有员工