3
2

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 5 years have passed since last update.

BigQueryのWindow関数

Last updated at Posted at 2019-07-16

Window関数とは

ただの集約関数じゃないの?いいえ違います。
Googleの公式リファレンスには以下のように記載されています(2019年6月14日時点)。

データベースでは、分析関数は行のグループ全体に対して集計値を計算する関数です。行のグループに対して単一の集計値を返す集計関数とは異なり、分析関数は入力行のグループに対して分析関数を計算することで、行ごとに単一の値を返します。

一体どういうことかなかなかピンと来ないと思いますので具体的に説明していきます。

サンプルテーブル

例えば肉・野菜・魚の好き嫌いのアンケートをネットで調査したとする

sample_table

id user_id category like_or_not created_at
1 A fish like 2019-01-01 0:00:00
2 B fish not 2019-01-02 0:00:00
3 C meat like 2019-01-03 0:00:00
4 B meat like 2019-01-03 0:00:00
5 C fish not 2019-01-04 0:00:00
6 B vegetable not 2019-01-03 0:00:00
7 C vegetable not 2019-01-05 0:00:00

サンプルコード

普通の集約関数

ユーザーごとの初回回答日時を求める


SELECT
 sample_table.user_id,
 MIN(sample_table.created_at) AS first_created_at
FROM
 sample_table
GROUP BY sample_table.user_id

実行結果

sample_table.user_id first_created_at
A 2019-01-01 0:00:00
B 2019-01-02 0:00:00
C 2019-01-03 0:00:00

WINDOW関数を使う場合

sample_tableに1列追加してユーザーの最初の回答日時を付け加える
PARTITION BYこれがGROUP BY みたいなものです
GROUP BYしなくてもユーザーの最初の回答日時を算出できます

SELECT
 sample_table.*,
 MIN(sample_table.created_at)OVER(PARTITION BY sample_table.user_id) AS first_created_at
FROM
 sample_table

実行結果

id user_id category like_or_not created_at first_created_at
1 A fish like 2019-01-01 00:00:00 UTC 2019-01-01 00:00:00 UTC
2 B fish not 2019-01-02 00:00:00 UTC 2019-01-02 00:00:00 UTC
4 B meat like 2019-01-03 00:00:00 UTC 2019-01-02 00:00:00 UTC
6 B vegetable not 2019-01-03 00:00:00 UTC 2019-01-02 00:00:00 UTC
5 C fish not 2019-01-04 00:00:00 UTC 2019-01-03 00:00:00 UTC
3 C meat like 2019-01-03 00:00:00 UTC 2019-01-03 00:00:00 UTC
7 C vegetable not 2019-01-05 00:00:00 UTC 2019-01-03 00:00:00 UTC

このテーブルがあれば初回の回答日時からどれくらい経過して回答しているかなど算出可能範囲が広がりますよね。

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?