SQL分析関数 PERCENT_RANK パーセントで順位を計算する
最近マイブームとなっているSQLネタ(分析関数)を続けていこうと思う。
分析関数は「ウインドウ関数」と呼ばれる場合もある。レガシーな集計(COUNTとかSUMとか)とは違い、かなり色々なことができるように拡張されている、結構ハイテク(そうでもないか)な関数なのである。
しかし「WINDOWって何」といったことを本ブログで解説していない気もする...LEADのところで少しやったか。集計関数に引き渡す集合の範囲を決めるのがWINDOW。
それはさて置き。
SQLポケリにも分析関数を書いてはあるものの、何せ、いまいち「バラバラで決まっていない感」」があったので、見送っていた機能なのである。
最近になって、「やっぱり便利なんじゃない分析関数」ということで、このブログに"セコセコ"記事をアップしている次第である。で、今回は、PERCENT_RANKである。
PERCENT_RANK
RANKとDENSE_RANKは「順位」を整数値で計算してくれる関数であった。
「しかし」である。
唐突に「あなたの順位は、54位でした」と言われても、全体数がわからなければ、成績が良いのか悪いのか、中間くらいなのか、よくわかりませんよね。
全体で1000のうちの54位なら、まぁ上位の方だけれども、全体で100なら「中くらいの成績」でしかないわけである(一人中の一人だから1位と言われても...)。
そういった場合は、「パーセントで順位を示してあげる」ということをするわけなのだ!(うっ、なんか偉そう)。
パーセントなら、全体が100であることは「世界中で決定」しているので、50%ならちょうど中間だし、10%位なら、ベスト10入り。90%とかだとお尻の方、といった判断が簡単にできる。
「PERCENT_RANK」を使えば、全体で何個中の何位といった「パーセンテージ」で順位を計算してくれる。やってみよう。
SELECT val, PERCENT_RANK() OVER (ORDER BY val ASC) PRANK FROM test_analyze2 val PRANK ---- ----- 1 0 2 0.25 3 0.5 3 0.5 4 1
PERCENT_RANKの計算結果は、パーセンテージと言っても0〜100の数値ではなく、0〜1.0となる。本当に百分率(単位を%)にしたければ、100を掛け算すれば良い。
一番成績が優秀なデータは、順位0.0となる。逆に、一番お尻のデータは、1.0である。
ここでふと思った、1件しかデータがなかったら?0.0だろうか、1.0かも?
やってみた。
SELECT PERCENT_RANK() OVER (ORDER BY dummy ASC) PRANK FROM DUAL
PRANK投稿者プロフィール
最新の投稿
コンピューター関係の記事2025年4月26日アイキャッチ画像にSQLアイコンとJSONアイコンが欲しい
コンピューター関係の記事2025年4月23日AdSense審査に無事パス
コンピューター関係の記事2025年4月22日SSブログ復活
コンピューター関係の記事2025年4月22日SSブログが無くなった余波は大きい