2

我正在尝试使用此公式找到百分位数。(B+0.5E)*100/(N)为“X”。其中 x 是我在“emp”表中的值。B=x 以下的值数,E=等于 x 的值数,N =该表中值的总数。我在 MySQL 中找不到“B”和“E”时遇到困难。我已经尝试过查询,但它不起作用。是否可以为整个公式运行单个查询?

4

2 回答 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 回答