SQL怎么计算每个分组的中位数

这篇文章主要为大家分析了SQL怎么计算每个分组的中位数的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“SQL怎么计算每个分组的中位数”的知识吧。

创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、网站设计、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的锡山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

中位数是指一组数据排序以后,位于中间位置的数据值。如果数据个数是奇数,中位数就是最中间位置那个值;如果是偶数,则是中间位置那两个数的平均值。

怎么查询出数据分组以后每个组的中位数呢?

用SQL来解决这个问题是很有难度的!

SQL的集合是无序的,没有数据位置的概念,需要人为地造出行号,但是要对各分组独立编行号也困难。后来在SQL2003标准中加入了窗口函数,可以对分组编行号了,但是求各组中位数依然繁琐。

举个例子:现有成绩表SCORES数据如下,要求查出每科成绩的中位数。

COURSESCORE
History68.5
History79.0
History82.5
History88.0
History93.5
Maths75.5
Maths83.0
Maths85.0
Maths95.5

查询出来的各科成绩中位数应该是:

COURSESCORE
History82.5
Maths84.0

以Oracle为例,用SQL写出来是这样:

WITH  A  AS 

       ( SELECT COURSE, SCORE,

              ROW_NUMBER()OVER ( PARTITION BY COURSE ORDER BY SCORE) AS RN,

              COUNT(*) OVER (PARTITION BY COURSE) AS CNT

       FROM SCORES ),

B  AS

       (SELECT * FROM A WHERE RN>(CNT-0.5)/2 AND RN<(CNT+2.5)/2 )

SELECT COURSE, AVG(SCORE) AS SCORE FROM B

GROUP BY COURSE

ORDER BY COURSE;

这里的A为每组数据加上组内行号并统计每组记录数,B查出位于每组中间位置的记录,最后从B里算出每组平均值,即为中位数。解题步骤比较多,这种SQL不好写。另外还有不用窗口函数的办法,语句就更加复杂了,这里不再列出。

集算器的SPL语言支持组内运算,也提供了中位数函数,解决这个问题就会简单很多,只需1行代码:

connect("mydb").query("select * from scores order by course, score").group(COURSE).new(~.COURSE,~.(SCORE).median():SCORE)

关于“SQL怎么计算每个分组的中位数”就介绍到这了,更多相关内容可以搜索创新互联以前的文章,希望能够帮助大家答疑解惑,请多多支持创新互联网站!

网站题目:SQL怎么计算每个分组的中位数
网页地址:https://www.cdcxhl.com/article32/ggodpc.html

成都网站建设公司_创新互联,为您提供网站制作移动网站建设网站导航软件开发动态网站网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

微信小程序开发