この式を使用してパーセンタイルランクを見つけようとしています。(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))
および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 に答える