sql – 有更好的方法来计算中位数(不是平均值)
发布时间:2020-12-12 16:35:11 所属栏目:MsSql教程 来源:网络整理
导读:假设我有下面的表定义: CREATE TABLE x (i serial primary key,value integer not null); 我想计算MEDIAN的价值(而不是AVG).中位数是将集合分成两个包含相同数量元素的子集的值.如果元素数量是偶数,则中位数是最低分数中最大值的平均值,也是最大分数的最小值
假设我有下面的表定义:
CREATE TABLE x (i serial primary key,value integer not null); 我想计算MEDIAN的价值(而不是AVG).中位数是将集合分成两个包含相同数量元素的子集的值.如果元素数量是偶数,则中位数是最低分数中最大值的平均值,也是最大分数的最小值. (详见维基百科) 这是我如何设法计算MEDIAN,但我想有一个更好的方法: SELECT AVG(values_around_median) AS median FROM ( SELECT DISTINCT(CASE WHEN FIRST_VALUE(above) OVER w2 THEN MIN(value) OVER w3 ELSE MAX(value) OVER w2 END) AS values_around_median FROM ( SELECT LAST_VALUE(value) OVER w AS value,SUM(COUNT(*)) OVER w > (SELECT count(*)/2 FROM x) AS above FROM x GROUP BY value WINDOW w AS (ORDER BY value) ORDER BY value ) AS find_if_values_are_above_or_below_median WINDOW w2 AS (PARTITION BY above ORDER BY value DESC),w3 AS (PARTITION BY above ORDER BY value ASC) ) AS find_values_around_median 有任何想法吗? 解决方法确实有一个更简单的方法.在Postgres中,您可以定义自己的聚合函数.我向PostgreSQL代码片段发送了一些功能来做中位数以及模式和范围.http://wiki.postgresql.org/wiki/Aggregate_Median (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |