トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
3-28 前年との大小関係を求める
SQLパズル
年度売上テーブル
年度 売上
---- ----
2000 100
2001 200
2002 300
2003 300
2004 600
2005 500
2006 400
2007 400
前年(1年前)と、売上を比較し、
売上が増えれば、成長
売上が減れば、後退
売上が変わらなければ、横ばい
前年がなければ、前年度なし
と出力する
出力結果
年度 売上 成長
---- ---- ----------
2000 100 前年度なし
2001 200 成長
2002 300 成長
2003 300 横ばい
2004 600 成長
2005 500 後退
2006 400 後退
2007 400 横ばい
データ作成スクリプト
create table 年度売上(
年度 number(4),
売上 number(4));
insert into 年度売上 values(2000,100);
insert into 年度売上 values(2001,200);
insert into 年度売上 values(2002,300);
insert into 年度売上 values(2003,300);
insert into 年度売上 values(2004,600);
insert into 年度売上 values(2005,500);
insert into 年度売上 values(2006,400);
insert into 年度売上 values(2007,400);
commit;
SQL
--■■■相関サブクエリを使う方法■■■
select 年度,売上,
case sign(売上-(select b.売上
from 年度売上 b
where b.年度 = a.年度 -1))
when 1 then '成長'
when 0 then '横ばい'
when -1 then '後退' else '前年度なし' end as 成長
from 年度売上 a
order by 年度;
--■■■Lag関数を使う方法■■■
select 年度,売上,
case sign(売上 - Lag(売上) over(order by 年度))
when 1 then '成長'
when 0 then '横ばい'
when -1 then '後退' else '前年度なし' end as 成長
from 年度売上
order by 年度;
解説
sign関数で、
等号もしくは、不等号
を求めてます
マニュアル(Sign関数)(英語)