トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

3-4 順位にupdate

SQLパズル

Table1のVal1の順位を、Table1のVal2にセットする。


データ作成スクリプト

create table Table1(
Val1 number(2),
Val2 number(2));

insert into Table1(Val1)
          select 9 from dual union all select 9 from dual
union all select 8 from dual union all select 8 from dual
union all select 7 from dual union all select 7 from dual
union all select 6 from dual union all select 6 from dual
union all select 4 from dual union all select 3 from dual;
commit;


SQL

--■■■count関数を使う方法(一般的な順位)■■■
update Table1 a set Val2 =(select count(b.Val1) + 1 from Table1 b
                            where b.Val1 > a.Val1);

--■■■count関数を使う方法(DENSEな順位)■■■
update Table1 a set Val2 =(select count(distinct b.Val1) + 1 from Table1 b
                            where b.Val1 > a.Val1);

--■■■分析関数を使う方法(一般的な順位)■■■
update Table1 a set Val2 =(select b.Rank
                             from (select c.RowID as Row_ID,
                                   Rank() over(order by c.Val1 desc) as Rank
                                     from Table1 c) b
                           where a.RowID = b.Row_ID);

--■■■分析関数を使う方法(DENSEな順位)■■■
update Table1 a set Val2 =(select b.Rank
                             from (select c.RowID as Row_ID,
                                   Dense_Rank() over(order by c.Val1 desc) as Rank
                                     from Table1 c) b
                           where a.RowID = b.Row_ID);


解説

count関数を使えば、順位を求めることが可能です。

順位は、
自分より点数が高い人の数に、1足したものであるという考え方を使うと、
分かりやすいと思います。

3-22  相関サブクエリで順位付け