SQL 如何计算每个分组的中位数 |
您所在的位置:网站首页 › 组中值计算中位数 › SQL 如何计算每个分组的中位数 |
中位数是指一组数据排序以后,位于中间位置的数据值。如果数据个数是奇数,中位数就是最中间位置那个值;如果是偶数,则是中间位置那两个数的平均值。 怎么查询出数据分组以后每个组的中位数呢? 用SQL来解决这个问题是很有难度的! SQL的集合是无序的,没有数据位置的概念,需要人为地造出行号,但是要对各分组独立编行号也困难。后来在SQL2003标准中加入了窗口函数,可以对分组编行号了,但是求各组中位数依然繁琐。 举个例子:现有成绩表SCORES数据如下,要求查出每科成绩的中位数。 COURSESCOREHistory68.5History79.0History82.5History88.0History93.5Maths75.5Maths83.0Maths85.0Maths95.5查询出来的各科成绩中位数应该是: COURSESCOREHistory82.5Maths84.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 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |