LeetCode--571. 给定数字的频率查询中位数

   日期:2020-10-07     浏览:99    评论:0    
核心提示:建表create table numbers(Number int,Frequency int );insert into numbers values(0, 7);insert into numbers values(1, 1);insert into numbers values(2, 3);insert into numbers values(3, 1);开窗函数思路:从后往前和从前往后的频数相加,两个数都需要大于等于总数一半,再取平均select avg(number.

建表

create table numbers
(
Number int,
Frequency int 
);
insert into numbers values(0, 7);
insert into numbers values(1, 1);
insert into numbers values(2, 3);
insert into numbers values(3, 1);

开窗函数思路:

从后往前和从前往后的频数相加,两个数都需要大于等于总数一半,再取平均

select avg(number) median
from(
    select number,
           sum(Frequency) over (order by number) a, -- 从前往后 频数相加
           sum(Frequency) over (order by number desc) b, -- 从后往前 频数相加
           sum(Frequency) over () c -- 总数,开窗了就不用group by了
    from Numbers
) n1
where a >= c/2 and b >= c/2

变量做法

select avg(Number) as median from
(
 select Number, Frequency, @sum as sum1, @sum:=Frequency+@sum as sum2
 from Numbers,(select @sum:=0) t
 order by Number
) t
where if
(
@sum&1, sum1<=floor(@sum/2) and sum2>floor(@sum/2),
sum1<=(@sum/2) and sum2>=(@sum/2)
)

此题我觉得逻辑能解决的非要写到sql里就是很麻烦,我估计出题人的本意是可以用存储过程来处理

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服