赞
踩
思路:
找中位数,要用partition分窗口按公司找,然后orderby排序
用count + partition找出公司的总数
然后找到满足ranking和cnt的关系的指定位置
sql
# Write your MySQL query statement below
# partition 分区很有用,也叫窗口函数
select Id, Company, Salary
from
(
select Id, Company, Salary,
row_number() over(partition by Company order by Salary) ranking, # 这里按照公司分组排序取排名
count(Id) over(partition by Company) cnt # 这里统计每个公司的总人数
from Employee
) a
where a.ranking >= a.cnt / 2 and a.ranking <= a.cnt / 2 + 1
# 偶数输出中间两个,奇数输出中间一个
总结:
窗口函数partition写法:
row_number()这种窗口特有 + over (partition by 属性 order by 属性)
聚合函数 over (parition by 属性)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。