WITH句の使い方

エキサイトのしばたにえんです。 sqlのWITH句をこないだ初めて使いましたのでその使い方を紹介いたします。

でWITH句を使用することができます。

使い方

以下のような商品販売テーブル(sales)があるとします

code sales_date item_count
A00003 2021-05-17 10:30:00.000 2
A00001 2021-05-17 10:20:00.000 3
A00002 2021-05-17 10:15:00.000 3
A00003 2021-05-17 10:10:00.000 4
A00001 2021-05-17 10:08:00.000 3
A00002 2021-05-17 10:05:00.000 3
A00001 2021-05-17 10:03:00.000 3
SELECT 
    * 
FROM
    sales;

このテーブルにcode毎にitem_countを合計した値も追加して取得する必要があるとします。

code sales_date item_count sum_count
A00003 2021-05-17 10:30:00.000 2 6
A00001 2021-05-17 10:20:00.000 3 9
A00002 2021-05-17 10:15:00.000 3 6
A00003 2021-05-17 10:10:00.000 4 6
A00001 2021-05-17 10:08:00.000 3 9
A00002 2021-05-17 10:05:00.000 3 6
A00001 2021-05-17 10:03:00.000 3 9
-- WITH句を使わない場合
SELECT
    sales.*,
    sum_count
FROM
    sales
JOIN (
    SELECT
        SUM(item_count) AS sum_count,
        code
    FROM
        sales
    GROUP BY
        code
) AS sub_sales
ON
    sales.code = sub_sales.code;

これで取得することができますが、 JOIN句の中に、SELECT句があるので読みにくいです。

WITH句を使った場合

-- WITH句を使う場合
WITH alias AS (
    SELECT
        SUM(item_count) AS sum_count,
        code
    FROM
        sales
    GROUP BY
        code
)
SELECT
    sales.*, alias.sum_count
FROM
    sales
JOIN
    alias
ON
    sales.code = alias.code

WITH句にあるSQL文は、その後のSELECT句より先に実行されます。 WITH句を使わない場合に比べ、JOINにあるSELECT句が外に出るので見やすくなっています。

使う機会があれば使ってみるといいかもしれません。