7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Athena】With句を使って一時テーブルを作成してSQLを簡略化させる

Posted at

複雑なサブクエリ

AthenaでSQLを書いてデータを抽出しているとどうしても複雑なSQLになることが多いです。何度もつかうサブクエリに関してはviewテーブルを作成することも考えられますが、一時的に使うものまでviewテーブルを作成するのは面倒に感じられます。

With句を使って一時テーブルを作成する

With句のPrestodbのドキュメントはこちらです。

例えば以下のSQLを作成したとします。

SELECT
    t1.*, t2.*
FROM
    (SELECT a, MAX(b) AS b FROM x GROUP BY a) as t1
    INNER JOIN
        (SELECT a, AVG(d) AS d FROM y GROUP BY a) as t2
    ON  t1.a = t2.a

サブクエリで取得しているテーブルをWith句で書くと処理がSQLスッキリします。

WITH
  t1 AS (SELECT a, MAX(b) AS b FROM x GROUP BY a),
  t2 AS (SELECT a, AVG(d) AS d FROM y GROUP BY a)

SELECT t1.*, t2.*
FROM t1
INNER JOIN t2 ON t1.a = t2.a;

スッキリするだけでなく、複数回同じサブクエリが登場するときはそのまま使いまわしも可能、サブクエリの条件が変わったときもWith句の変更のみで済むため、変更漏れのリスクが避けられます。
With句は非常に便利なので使えることだけでも覚えておくと良いと思います。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?