###『変更元のSQL』の説明
PostgreSQL9.2でViewを作成しようとしています。
ユーザーの日々の購入履歴を年月毎に集計して出力する場合を想定しています。
1つの購入履歴テーブルに複数のマスターをJoinしているのですが、
マスターは年月で履歴管理しているデータで膨大な件数とします。
現状は、初めに年月で絞り込みをしてからJoinするようにしているのですが、
以下のSQLをView化するにはどのようにすればいいでしょうか?
###変更元のSQL
購入履歴テーブル:利用者ID、購入年月日、金額
支払方法マスター:利用者ID、支払方法、有効開始年月、有効終了年月 ※年月でユニークになる
お届け先マスター:利用者ID、住所、有効開始年月、有効終了年月 ※年月でユニークになる
↓
欲しいView:利用者ID、購入年月、金額合計、支払方法、住所
SQL
1--購入履歴テーブルを利用者と年月で絞り込んで合計を算出 2with 購入履歴@ as ( 3 select 利用者ID, sum(金額) from 購入履歴 4 where to_char(購入年月日, 'yyyy/mm') = {yyyy/mm} ←画面から入力された年月 5 and 利用者ID in ('xxx,xxx,xxx,xxx,xxx') ←画面から入力された複数のユーザID 6 group by 利用者ID, to_char(購入年月日, 'yyyy/mm') 7), 8--支払方法マスターを利用者と年月で絞り込む 9支払方法@ as ( 10 select * from 支払方法 11 where {yyyy/mm} between 有効開始年月 and 有効終了年月 ←画面から入力された年月 12 and 利用者ID in ('xxx,xxx,xxx,xxx,xxx') ←画面から入力された複数のユーザID 13), 14--お届け先マスターを利用者と年月で絞り込む 15お届け先@ as ( 16 select * from お届け先 17 where {yyyy/mm} between 有効開始年月 and 有効終了年月 ←画面から入力された年月 18 and 利用者ID in ('xxx,xxx,xxx,xxx,xxx') ←画面から入力された複数のユーザID 19) 20--それぞれのテーブルをJoinでつなぐ 21select * from 購入履歴@ 22 left join 支払方法@ 23 on 購入履歴.利用者ID = 支払方法@.利用者ID 24 left join お届け先@ 25 on 購入履歴.利用者ID = お届け先@.利用者ID