栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Greenplum中的滚动(移动)中值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Greenplum中的滚动(移动)中值

一句话-维基百科的一篇引文:ORDER BY

ORDER BY是对结果集中的行进行排序的唯一方法。
没有此子句,关系数据库系统可以按任何顺序返回行。
如果需要排序,则必须在应用程序发送的SELECt语句中提供ORDER
BY。尽管某些数据库系统允许在子选择或视图定义中指定ORDER BY子句,但该显示不起作用。视图是逻辑关系表,
关系模型要求一个表是一组行,这意味着没有排序顺序。


由于您需要计算当前 行和前一行 的中位数,因此表中必须有一个附加行, 行定义 了行的顺序,
并且可以用来确定给定行之前的行和之后的行。
让我们说这样的一

id
列:

| id | x | rolling_median_x ||----|---|------------------||  1 | 4 |     4 ||  2 | 1 |   2.5 ||  3 | 3 |     3 ||  4 | 2 |   2.5 ||  5 | 1 |     2 ||  6 | 6 |   2.5 ||  7 | 9 |     3 |

如果您不能使用解析函数,请尝试使用纯SQL。
本文介绍了使用SQL计算中位数的各种方法。
我认为,亨德森的中位数将最适合我们的需求:

SELECT CASE COUNT(*) % 2       WHEN 0        -- even sized table       THEN (P1.part_wgt + MIN(CASE WHEN P2.part_wgt > P1.part_wgt THEN P2.part_wgt ELSE NULL END))/2.0       ELSE P1.part_wgt --odd sized table       END AS median   FROM Parts AS P1, Parts AS P2 GROUP BY P1.part_wgtHAVINg COUNT(CASE WHEN P1.part_wgt >= P2.part_wgt       THEN 1       ELSE NULL END)       = (COUNT(*) + 1) / 2;

只需将每行的查询作为一个依赖子查询运行,一般的想法是这样的:

SELECt t.*, (        SELECT .... Henderson's query FROM table x        WHERe x.id <= t.id        ......       ) As our_medianFROM table t

您可以在此演示中找到示例实现

SELECt t.*, (    SELECT CASE COUNT(*) % 2WHEN 0        -- even sized tableTHEN (P1.x + MIN(CASE WHEN P2.x > P1.x     THEN P2.x     ELSE NULL END))/2.0ELSE P1.x --odd sized tableEND AS median       FROM Table333 AS P1, Table333 AS P2      WHERe p1.id <= t.id AND p2.id <= t.id     GROUP BY P1.x    HAVINg COUNT(CASE WHEN P1.x >= P2.xTHEN 1ELSE NULL END)= (COUNT(*) + 1) / 2    ) as Our_medianFROM Table333 t;| id | x | rolling_median_x | our_median ||----|---|------------------|------------||  1 | 4 |     4 |          4 ||  2 | 1 |   2.5 |        2.5 ||  3 | 3 |     3 |          3 ||  4 | 2 |   2.5 |        2.5 ||  5 | 1 |     2 |          2 ||  6 | 6 |   2.5 |        2.5 ||  7 | 9 |     3 |          3 |

这个查询可能会很慢-这是您必须拥有古代版本的PostgreSQL所要付出的代价



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号