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)) 

およびEby:

 SUM(IF(column_of_value = 'x', column_of_value, 0))

およびNby:

 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フィドルを参照してください。

于 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 に答える