SQLアタマアカデミー
最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (4)OLAP関数と集約関数を組み合わせる
OLAP関数と集約関数を組み合わせる
これでOLAP関数の基本は押さえられました。今度はもう少し踏み込んだ使い方を勉強しましょう。もう一度同じAccountsテーブル
図6 記録日ごとに入金額の大きかった順のランキング
record_date sum_prc_amt rank_sum ----------- ----------- -------- 2010-01-17 130,000 1 2010-01-16 54,000 2 2010-01-18 22,000 3 2010-01-20 -76,500 4 2010-01-19 -469,000 5
ランキングをつける関数は,
結論から言うと,
リスト6 処理日ごとに処理金額の合計を算出
SELECT record_date,
SUM(prc_amt) sum_prc_amt
FROM Accounts
GROUP BY record_date
図8 リスト6を実行して作られる中間テーブル
record_ | sum_ |
2010-01-16 | 54,000 |
2010-01-17 | 130,000 |
2010-01-18 | 22,000 |
2010-01-19 | -469,000 |
2010-01-20 | -76,500 |
この結果にランキングをつければよいわけです。それでは,
- 第一の軸
(カット) :どんなキーでこの結果をカットするべきか? - 結果全体を一つのウィンドウとみなすため,
カットは不要。したがってPARTITION BY句も不要 - 第二の軸
(走査順序) :どんなキーで走査するべきか? - もちろん,
処理金額の合計の降順。つまりSUM(prc_ amt)の降順
ここまでわかれば,
ORDER BY句にSUM(prc_
リスト7 処理日ごとの処理金額の合計でランキング
-- My SQL以外
SELECT record_date,
SUM(prc_amt) sum_prc_amt,
RANK() OVER (ORDER BY SUM (prc_amt) DESC) AS rank_sum
FROM Accounts
GROUP BY record_date;
-- My SQL
CREATE VIEW SumByDate (record_date, sum_prc_amt) AS
SELECT record_date,
SUM(prc_amt) sum_prc_amt
FROM Accounts
GROUP BY record_date;
なお,
- OLAP関数のルール 5
- PARTITION BYとORDER BYのキーには,
SELECT句で指定可能な項目を使用できる
OLAP 関数はいつ計算されるのか
OLAP関数を記述できる場所は,
この使える場所の制限は,
- ① FROM:走査対象テーブルの絞り込みとJOINを行う
- ② WHERE:レコードの制限を行う
(restriction) - ③ GROUP BY:集約を行う
- ④ HAVING:集約結果のレコードの制限を行う
- ⑤ SELECT:選択対象列の制限を行う
(projection) - ⑥ ORDER BY:結果のソートを行う
この一連の処理ステップの中で,
それが可能な理由は,
バックナンバー
SQLアタマアカデミー
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (5)集合指向と手続き型
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (4)OLAP関数と集約関数を組み合わせる
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (3)OLAP専用関数
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (2)OLAP関数の基本構文
- 最終回 OLAP関数で強力な統計処理を実現!―手続き型から理解するSQL (1)OLAP関数とは何か
- 第10回 結合大全 (5)非等値結合
- 第10回 結合大全 (4)自己結合
- 第10回 結合大全 (3)外部結合
- 第10回 結合大全 (2)内部結合
- 第10回 結合大全 (1)クロス結合