作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 MySQL SELECT 查询,它在同一个表中使用 20 个不同的比较。这是一个例子:
SELECT * FROM mytable
WHERE (col1 > (col2 * 0.25))
AND (col5 < col10) .......
我正在尝试根据返回的 SELECT
结果中名为 SCORE
的列的顺序计算百分位数排名。我已经尝试使用增量行号和 COUNT(*)
来获取股票的排名和返回的结果总数,但不确定如何分配相同的排名,其中一些结果具有相同的 得分
。
这是我要计算的公式:
((COUNT(lower scores) + (COUNT(same/tied scores) / 2)) * 100) / COUNT(total results)
如何在同一结果行中找到较低分数、相同/并列分数和总分的数量,以便即时计算百分位数?
我试图避免使用存储过程,因为我希望我的应用程序管理员根据需要在我的应用程序管理区域内定制 SELECT 语句。
最佳答案
使用上面 Shlomi 的代码,这是我想出的用于计算百分位数排名的代码(以防将来有人想计算这些):
SELECT
c.id, c.score, ROUND(((@rank - rank) / @rank) * 100, 2) AS percentile_rank
FROM
(SELECT
*,
@prev:=@curr,
@curr:=a.score,
@rank:=IF(@prev = @curr, @rank, @rank + 1) AS rank
FROM
(SELECT id, score FROM mytable) AS a,
(SELECT @curr:= null, @prev:= null, @rank:= 0) AS b
ORDER BY score DESC) AS c;
关于MySQL - 动态计算百分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11543696/
我是一名优秀的程序员,十分优秀!