我正在尝试使用此公式找到百分位数。(B+0.5E)*100/(N)
为“X”。其中 x 是我在“emp”表中的值。B=x 以下的值数,E=等于 x 的值数,N =该表中值的总数。我在 MySQL 中找不到“B”和“E”时遇到困难。我已经尝试过查询,但它不起作用。是否可以为整个公式运行单个查询?
问问题
2616 次
2 回答
4
将 B 替换为:
SUM(IF(column_of_value < 'x', column_of_value, 0))
和 E:
SUM(IF(column_of_value = 'x', column_of_value, 0))
和 N 通过:
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
请参阅此处的SQL Fiddle。
于 2012-09-12T06:02:39.517 回答
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
于 2012-09-12T05:57:10.527 回答