我正在尝试使用此公式找到百分等级。(B+0.5E)*100/(N)
代表'X'。其中x是'emp'表中的值.B =低于x的值的数量,E =等于x的值的数量,N =该表中的值的总数。
我在MySQL中找到'B'和'E'时遇到了困难..我已经尝试过查询但是它不起作用..是否可以对整个公式运行单个查询?
答案 0 :(得分:4)
将B替换为:
SUM(IF(column_of_value < 'x', column_of_value, 0))
和E by:
SUM(IF(column_of_value = 'x', column_of_value, 0))
和N by:
COUNT(column_of_value)
您的计算成为:
((SUM(IF(column_of_value < 'x', column_of_value, 0)) + (0.5 * SUM(IF(column_of_value = 'x', column_of_value, 0)))) * 100) / COUNT(column_of_value) AS result
答案 1 :(得分:1)
如果这不能指导你朝着正确的方向前进,我很抱歉,但我很难理解你的问题。这样的事可以帮助你:
select
emp,
(
select
count(*)
from
tableName
where
emp=a.emp
) as E,
(
select
count(*)
from
tableName
where
emp<a.emp
) as B,
(
select
count(*)
from
tableName
) as N
from
tableName a
它正在制作一系列子选择,返回您想要的公式值。
编辑:我完全错过了标题中的mysql(已将标记添加到问题中)。
@Ninsuo在正确的轨道上,mysql支持一个方便的if
语句,你可以使用它 - 虽然我认为你需要使用记录计数而不是它们的总和。
这样的事情会让你走上正确的道路:
select
emp,
(SUM(IF(column_of_value < emp, 1, 0)) +0.5*SUM(IF(column_of_value = emp, 1, 0)))*100/count(emp) as percentile
from
yourTableName
group by
emp