首页 > 其他 > 详细

求中位数

时间:2021-07-02 11:58:33      阅读:30      评论:0      收藏:0      [点我收藏+]

当某一数的正序和逆序累计均大于整个序列的数字个数的一半即为中位数

 

CREATE TABLE class_grade (
grade varchar(32) NOT NULL,
number int NOT NULL
);

INSERT INTO class_grade VALUES
(‘A‘,1),
(‘C‘,1),
(‘D‘,1),
(‘B‘,1),
(‘E‘,1);

/*
select grade
from
(
    select grade
         , number
         , (
               select sum(number) + 1
               from class_grade x
               where x.grade < class_grade.grade
           ) as rowid_start
         , (
               select sum(number) from class_grade x where x.grade <= class_grade.grade
           ) as rowid_end
    from class_grade
) a
, (
      select sum(number)*1.00 / 2     as start_index
           , sum(number)*1.00 / 2 + 1 as end_index
      from class_grade
  ) b
where a.rowid_start between b.start_index and b.end_index
	  or
	  a.rowid_end between b.start_index and b.end_index
	  or
	  b.start_index between a.rowid_start  and a.rowid_end 
	  or
	  b.end_index between a.rowid_start  and a.rowid_end 
order by grade;
*/

select y.grade from (
select 
grade
,sum(number) over(order by grade) as sum_asc
,sum(number) over(order by grade desc ) as  sum_desc
from 
dbo.class_grade) y
,(select sum(number)*1.00/2 as num from dbo.class_grade) x
where y.sum_asc>=x.num and y.sum_desc>=x.num
order by grade

drop table class_grade;

  

求中位数

原文:https://www.cnblogs.com/coolyylu/p/14961872.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!