通过查询计算 SQLiteDB 的下四分位数和上四分位数
Posted
技术标签:
【中文标题】通过查询计算 SQLiteDB 的下四分位数和上四分位数【英文标题】:Calculate lower and upper quartile of SQLiteDB via query 【发布时间】:2013-01-09 20:45:43 【问题描述】:我想计算这些fiddle with my DB and the query中我称之为“差异”的值的上四分位数和下四分位数
如何使用 SQLite 做到这一点?
http://www.sqlite.org/contrib?orderby=date 上有一个扩展名 extension-functions.c,其中包含这些命令。
如果这足以解决我的问题?如何将它集成到我的 Windows-XAMPP 环境中?
【问题讨论】:
【参考方案1】:我已经在您的查询中计算了上四分位数和下四分位数。
请检查这个小提琴:http://sqlfiddle.com/#!2/4f1a82/31/0
基本上逻辑是:
上四分位数 == 平均值(“最高数字”AND 平均值(“整个数据”)) 下四分位数 == 平均值(“最低数字”AND 平均值(“整个数据”))因此添加的查询逻辑是:
((MIN(diff)+ AVG(diff)) / 2) AS lowerQuartile,
((MAX(diff)+ AVG(diff)) / 2) AS upperQuartile,
【讨论】:
嗨@Michael Meier,如果这有帮助,请告诉我。 你好,谢谢你的回答,但是第一个四分位数应该是21,中位数应该是30,第三个四分位数应该是70。我没有见过这种计算第一和第三的方法四分位数之前...你确定它是正确的吗? 不,这不会正确计算四分位数。见en.wikipedia.org/wiki/Quartile,一般来说四分位数与均值无关。【参考方案2】:我发现了一个基于this blog post 的rather unpleasant approach - 基本上,使用 GROUP_CONCAT 按顺序列出所有值,并使用子字符串函数提取第 25 或第 75 个百分位数的值。
【讨论】:
【参考方案3】:这里有 2 个计算上四分位数 (Q3) 的版本:
选项 1: 计算 Q3 位置并获得其间值的平均值。 http://sqlfiddle.com/#!3/29f19/5 来源:How to Calculate the Upper Quartile
选项 2(更准确): 计算 Q3 位置并对最近的位置赋予更多权重(插值)。这种方法与 MS Excel 中的QUARTILE.EXC
相同。
http://sqlfiddle.com/#!3/29f19/6
注意:如果您想实现使用 N-1 的 QUARTILE
/QUARTILE.INC
,您可以通过减小大小而不是增加大小来实现。 SELECT @Q3_POS = 0.75*(COUNT(*)-1.00) from [Table1]
来源:Why Excel has Multiple Quartile Functions and How to Replicate the Quartiles from R and Other Statistical Packages
更多测试:
http://sqlfiddle.com/#!3/ca246/1位置接近上限值(Q3位置:6.75) http://sqlfiddle.com/#!3/ef046b/1 居中位置 (7.5) http://sqlfiddle.com/#!3/e2a49/1位置接近下限值(8.25) http://sqlfiddle.com/#!3/5f48c/1 准确位置 (9)【讨论】:
以上是关于通过查询计算 SQLiteDB 的下四分位数和上四分位数的主要内容,如果未能解决你的问题,请参考以下文章