トップページに戻る
次の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 相関サブクエリで順位付け