从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