MySql查找大于或小于值的行数

时间:2012-09-12 05:46:37

标签: mysql sql math

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

2 个答案:

答案 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

请在此处查看SQL Fiddle

答案 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