数据库
首页 > 数据库> > 从MySQL中选择第n个百分位数

从MySQL中选择第n个百分位数

作者:互联网

我有一个简单的数据表,我想从查询中选择大约40%的行.

我现在可以通过首先查询查找行数然后运行另一个排序并选择第n行的查询来执行此操作:

select count(*) as `total` from mydata;

这可能会返回93,93 * 0.4 = 37之类的东西

select * from mydata order by `field` asc limit 37,1;

我可以将这两个查询合并到一个查询中吗?

解决方法:

这将为您提供大约40%的百分位数,它返回40%的行小于它的行.它根据行数与第40个百分点的距离对行进行排序,因为没有行可能正好落在第40个百分点上.

SELECT m1.field, m1.otherfield, count(m2.field) 
  FROM mydata m1 INNER JOIN mydata m2 ON m2.field<m1.field
GROUP BY 
   m1.field,m1.otherfield
ORDER BY 
   ABS(0.4-(count(m2.field)/(select count(*) from mydata)))
LIMIT 1

标签:mysql,count,percentile
来源: https://codeday.me/bug/20190710/1422360.html