トップページに戻る
次の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句の力