SQLでテーブルの一部だったり集計結果を使って表を作りたい時、with構文が非常に役に立つ。
WITH tmp1 as (SELECT COUNT(*) cnt, date FROM t1 GROUP BY date), tmp2 as (SELECT COUNT(*) cnt, date FROM t2 GROUP BY date) SELECT tmp1.date, tmp1.cnt, tmp2.cnt FROM tmp1 JOIN tmp2 ON tmp1.date = tmp2.date;
このように、withを使って予めテーブルの集計を行っておく。
それぞれ名前をつけることで通常のテーブルと同様に扱うことができるので、これらを使用してselectしている。
もちろんfromに書いてもいいのだが、それだと集計テーブルの定義が見えにくくなってしまう。
テーブル間の複雑な集計結果を元に表を作る時に便利。