MIN和MAX值的MySql百分位数

时间:2018-05-28 21:29:20

标签: mysql database statistics

我们有一些图表,其中我们显示AVG值,以及MAX()和MIN()值。

由于数据他们想要删除MAX()和MIN()值的“极值”。

因此请求是每个记录的矿石:而不是简单的MIN()显示MIN使用5%百分位数,而MAX()则使用95%百分位数。

id,parent_cat,id,attentionTime

到目前为止,查询很简单,例如:

select AVG(attentionTime) AS time_attention, 
    MAX(attentionTime) AS time_max, 
    MIN(attentionTime) AS time_min 
FROM records_stats 
WHERE parent_cat = {N}

我不是一个数学家,所以任何试图理解这个问题的帮助都会受到赞赏。

百分位数,在数据库术语中是这样的:删除AVG小于5的值?或删除超过95的那些?

1 个答案:

答案 0 :(得分:0)

您可以使用子查询来获取整体最小/最大值,然后在where子句中使用from来获得预期行的平均值。

百分位值将是范围与最小/最大值的百分比。下面的查询将百分比应用于范围,然后通过添加最小值将其缩放回值。

例如,如果最小值为100且最大值为1000,则范围为900. 900的5%为45,95%为855,因此您希望行的平均值介于45和855之间

select AVG(attentionTime) AS time_attention, 
    (SELECT ((MAX(attentionTime) - MIN(attentionTime)) * 0.95) + MIN(attentionTime) FROM records_stats WHERE parent_cat = {N}) AS time_max, 
    (SELECT ((MAX(attentionTime) - MIN(attentionTime)) * 0.05) + MIN(attentionTime) FROM records_stats WHERE parent_cat = {N}) AS time_min
FROM records_stats 
WHERE parent_cat = {N}
    AND attentionTime BETWEEN time_min AND time_max