[解決済み】OracleのRANK()関数とDENSE_RANK()関数の違いは何ですか?
2022-04-15 11:07:09
質問
とはどう違うのですか?
RANK()
と
DENSE_RANK()
という関数はありますか?次のような場合、何番目の給料かを調べるにはどうしたらよいでしょうか?
emptbl
テーブル?
DEPTNO EMPNAME SAL
------------------------------
10 rrr 10000.00
11 nnn 20000.00
11 mmm 5000.00
12 kkk 30000.00
10 fff 40000.00
10 ddd 40000.00
10 bbb 50000.00
10 ccc 50000.00
を持つテーブルデータの場合
nulls
を調べたい場合、どうなりますか?
nth
給料は?
解決方法は?
RANK()
は、順序付きパーティション内での順位を与えます。同順位は同じ順位になり、次の順位はスキップされます。つまり、ランク2の商品が3つある場合、次のランクはランク5となります。
DENSE_RANK()
も順序付きパーティション内での順位を与えますが、順位は連続します。複数の項目からなる順位がある場合、その順位がスキップされることはありません。
ヌルについては
ORDER BY
節があります。ここに簡単なテストスクリプトがあるので、これで何が起こるか遊んでみてください。
with q as (
select 10 deptno, 'rrr' empname, 10000.00 sal from dual union all
select 11, 'nnn', 20000.00 from dual union all
select 11, 'mmm', 5000.00 from dual union all
select 12, 'kkk', 30000 from dual union all
select 10, 'fff', 40000 from dual union all
select 10, 'ddd', 40000 from dual union all
select 10, 'bbb', 50000 from dual union all
select 10, 'xxx', null from dual union all
select 10, 'ccc', 50000 from dual)
select empname, deptno, sal
, rank() over (partition by deptno order by sal nulls first) r
, dense_rank() over (partition by deptno order by sal nulls first) dr1
, dense_rank() over (partition by deptno order by sal nulls last) dr2
from q;
EMP DEPTNO SAL R DR1 DR2
--- ---------- ---------- ---------- ---------- ----------
xxx 10 1 1 4
rrr 10 10000 2 2 1
fff 10 40000 3 3 2
ddd 10 40000 3 3 2
ccc 10 50000 5 4 3
bbb 10 50000 5 4 3
mmm 11 5000 1 1 1
nnn 11 20000 2 2 2
kkk 12 30000 1 1 1
9 rows selected.
以下はリンクです。 には、良い説明といくつかの例があります。
関連
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] JOINとINNER JOINの違いについて
-
[解決済み] SQL Serverには、.NETのMath.Maxのような2つの値を取るMax関数はありますか?
-
[解決済み] MySQLのことです。変数 vs. 変数。その違いは何ですか?
-
[解決済み] VARCHARとCHARの違いは何ですか?
-
[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?
-
[解決済み] OracleのViewsとMaterialized Viewsの違いは何ですか?
-
[解決済み] Oracleのユーザーとスキーマの違い?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】Oracleクエリが順序付け後に返す行数を制限するにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] オラクルでの最大給与額(Ns
-
解決策:ユーザー root で localhost:3306 にある MySQL に接続できませんでした。
-
MHAの高可用性構成とフェイルオーバー
-
[解決済み] SQLサーバーでNULL = NULLがfalseに評価される理由
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] ある列の最大値を持つ行を取得する
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE