我们有一些图表,其中我们显示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的那些?
答案 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