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

2-3-2 メジアン(中央値)を取得

SQLパズル

MedianTable
Col1
----
   1
   5
  15
  20

MedianTableのCol1の中央値を取得する

出力結果
Median
------
    10


データ作成スクリプト

create table MedianTable(Col1 integer);

insert into MedianTable values
(1),(5),(15),(20);
commit;


SQL

select avg(Col1) as Median
from (select count(*) over() as RecordCount,
      Col1,
      Row_Number() over(order by Col1) as Rank
      from MedianTable) dummy
where (mod(RecordCount,2) = 0 and Rank in(RecordCount/2,RecordCount/2+1))
   or (mod(RecordCount,2) = 1 and Rank = Ceil(RecordCount/2.0));


解説

件数が偶数の場合と、奇数の場合とで、
対象となるレコードを分岐させています

CodeZine:HAVING句の力