最小值和最大值的mysql百分比

yfjy0ee7  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(626)

我们有一些图表,其中显示了一个平均值,旁边有max()和min()值。
由于数据的原因,他们希望删除max()和min()值的“极值”。
所以请求是针对每个记录的:使用5%的百分位数来代替普通的min()show,max()使用95%的百分位数。
身份证,父母,身份证,出勤时间
到目前为止,查询很简单,比如:

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

我不是一个数学爱好者,所以任何试图理解这个问题的帮助都是值得的。
percentil,在数据库术语中是这样的:删除平均值小于5的值?或者去掉95岁以上的?

gab6jxml

gab6jxml1#

您可以使用子查询来获取总体最小/最大值,然后在where子句中使用between来获取所需行的平均值。
百分位值是范围与最小/最大值的百分比。下面的查询将百分比应用于范围,然后通过添加最小值将其缩放回值。
例如,如果最小值为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

相关问题