我有以下数组:
array(
a => 6.75,
b => 5.45,
c => 8.76,
d => 7.76,
e => 8.16,
f => 2.76,
g => 4.67,
h => 9.01,
i => 5.42,
)
我希望实现的是对前四分位
进行平均
。
本质上,我需要按降序
顺序对数组进行排序,然后计算最高四分位数
(即 9(数组中元素的数量)x 25% = 2.25 向下舍入为 2,因此需要计算前两个数字的平均值)。
这就是我要找的人物。
我正在努力弄清楚如何实现这一目标,以及最好是在 PHP 中还是通过查询 MySQL 数据库来实现这一目标。
欢迎任何和所有建议、反馈和建议。
最佳答案
在 MySQL 中执行此操作会很困难,因为您不能直接使用变量 LIMIT
。
但是,当您只需要一小部分数据时,在那里执行此操作肯定比将所有数据传输到 PHP 更有效。
因此,考虑到这一点,尝试这个算法:
从表格中选择 COUNT(*)
以获取行数- 将该行数除以 4,称之为
$quartile_count
现在您需要一个嵌套查询:
SELECT AVG(`column_name`) FROM ( SELECT `column_name` FROM `table_name` ORDER BY `column_name` DESC LIMIT $quartile_count ) `tmp`
这是因为
LIMIT
必须先应用,然后再应用聚合AVG
函数。
关于PHP/MySQL 基于数组内容的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24551333/