3

以下を給与でランク付けする必要があり、最高の給与がランク1になります。

表示されているRANK列は、私が求めているものです。

Empname        sal      address           RANK
----------------------------------------------
Ram            3411     45,east road      2
Anirban        2311     34,west wind      4
Sagor          10000    34,south          1
Manisha        3111     12,d.h road       3
4

3 に答える 3

4

Oracle10gは、ROW_NUMBERのような分析/ランキング/ウィンドウ関数を使用できることを意味します。

SELECT t.empname,
       t.sal,
       t.address,
       ROW_NUMBER() OVER (ORDER BY t.sal DESC) AS RANK
  FROM TABLE t

衒学者の場合、同点が同じランク値を取得することを確認したい場合はROW_NUMBERDENSE_RANKに置き換えます。

2人の従業員の給与が同じである場合、RANK関数は両方の従業員に対して同じランクを返します。ただし、これによりランクにギャップが生じます(つまり、連続していないランク)。これは、連続したランキングを生成するdense_rank関数とはまったく異なります。

古い学校のランク付けの手段は、以下を使用することです。

SELECT t.empname,
       t.sal,
       t.address,
       (SELECT COUNT(*)
          FROM TABLE x 
         WHERE x.sal <= t.sal) AS RANK
  FROM TABLE t

出力はDENSE_RANK出力と一致します-タイは連続して番号が付けられている間、同じランク値を持ちます。

于 2010-07-31T20:00:05.007 に答える
1

ここでランクサンプルを見てください。

于 2010-07-31T19:46:01.417 に答える
1

分析関数については、この詳細で有益でありながらクイック リンクのAnalytical Functionsをよく参照します。

于 2010-12-24T01:03:07.033 に答える