【SQL】BigQueryにおけるGREATEST関数とは?使い方をわかりやすく解説

今回はGoogle BigQueryにおけるGREATEST関数の使い方を紹介する。

GREATEST関数はPostgreSQLやAmazon Redshift等の様々なRDBMSで使用することが出来る。

ただ、NULLの取り扱いなど挙動が異なる部分があったりするので、BigQueryのGREATEST関数に絞って解説したいと思う。

GREATEST関数とは?

GREATEST関数とは指定した引数の中で最大値を返してくれる関数だ。

複数列の値を比較して最大値を取得したい時や定数(100とか150など)と対象列の値を比較して大きい方を取得したい時などに便利な関数だ。

例えば、下記データの①sales_1 ②sales_2 ③sales_3カラムの値からGREATEST関数を使用して最大値を取得する場合のクエリとその結果は下記の通りだ。

date
sales_1
sales_2
sales_3
2024-02-01
10875
15522
13930
2024-02-02
13626
19399
18906
2024-02-03
14203
12014
19154
2024-02-04
15221
17049
18333
2024-02-05
19953
16711
15858
2024-02-06
16881
16831
16389
2024-02-07
11249
14738
10247
2024-02-08
12069
19624
16680
2024-02-09
16176
13991
14603
2024-02-10
14337
15332
13864

BQ_GREATEST①

GREATEST関数により、指定した3カラムの各行において、最大値のみを取得し、max_salesで表示していることがお分かりいただけると思う。

このようにGREATEST関数は指定した列の同じ行の値を比較して最大値を取得したい時に非常に便利だ。

スポンサーリンク

GREATEST関数の使い方

GREATEST関数の使い方はシンプルで、下記を指定して利用する。

  • 値を比較したい列(カラム)or定数

BQ_GREATEST②

基本的に指定したい列や定数を,(カンマ)で区切って指定するだけだ。

指定するカラム数に特に制限はないが、実務で使用する場合は2~5カラム程度がほとんどだろう。

具体例で使い方を詳しく見ていこう。

列同士の比較

まずは列(カラム)同士を比較する場合の具体例だ。

先ほどと同様に下記データを使う。

date
sales_1
sales_2
sales_3
2024-02-01
10875
15522
13930
2024-02-02
13626
19399
18906
2024-02-03
14203
12014
19154
2024-02-04
15221
17049
18333
2024-02-05
19953
16711
15858
2024-02-06
16881
16831
16389
2024-02-07
11249
14738
10247
2024-02-08
12069
19624
16680
2024-02-09
16176
13991
14603
2024-02-10
14337
15332
13864

上記データの内、①sales_1、②sales_2、③sales_3の3つのカラムをGREATEST関数で比較し、その内の最大値をmax_salesとして取得するクエリとその具体的な指定の仕方は下記の通りだ。

BQ_GREATEST③

その結果は先ほどの例と同様で、下記となる。

BQ_GREATEST⑤

この例では同じ行における3列(カラム)の値の比較をして最大値を取得してmax_salesで表示している。

このように列同士を比較して最大値を取得するのがGREATEST関数の使い方の1つだ。

列と定数の比較

次に列と定数を比較する使い方の具体例を見ていこう。

今度は2カラムのシンプルなデータを使用する。

date
sales_1
2024-02-01
10875
2024-02-02
13626
2024-02-03
14203
2024-02-04
15221
2024-02-05
19953
2024-02-06
16881
2024-02-07
11249
2024-02-08
12069
2024-02-09
16176
2024-02-10
14337

sales_1カラムの各値と定数(15000)の内、大きい方の値を取得したい場合(max_sales)のGREATEST関数を利用したクエリとその指定方法は下記の通りだ。

BQ_GREATEST⑦

このクエリの結果は下記の通りだ。

BQ_GREATEST⑨

max_salesでは定数で指定した15000とsales_1の値の内、大きい方を取得していることがお分かりいただけると思う。

これが列と定数を比較するGREATEST関数の使い方だ。

基準値を設定して、それよりも小さい場合は基準値を取得し、基準値を超えている場合はそのカラムの値を取得したい時に便利な使い方だ。

もちろん、2つ以上のカラムを指定し、そのカラムの値と定数を比較することも可能だ。

値にNULLが含まれる場合は要注意

BigQueryでGREATEST関数を使用する際にはNULLの取り扱いに注意する必要がある。

もし、GREATEST関数で指定するカラムの値の中にNULLが含まれている場合、他の値がNULLでなくても、結果はNULLになってしまう。

例えば、下記データでは2024-02-02のsales_2の値がNULLになっている。

date
sales_1
sales_2
sales_3
2024-02-01
10875
15522
13930
2024-02-02
13626
null
18906
2024-02-03
14203
12014
19154

この場合にGREATEST関数を使用して、sale1 , sales_2 , sales_3の中で最大値を取得しようとすると下記結果になる。

BQ_GREATEST⑩

sales_2がNULLの行だけ、結果がNULLになっていることがお分かりいただけると思う。

このようにGREATEST関数で指定するカラムにNULLが含まれている場合は、IFNULL関数等でNULLの場合は0を補完する処理を加える必要があることを覚えておきたい。

スポンサーリンク

まとめ

今回紹介したBigQueryにおけるGREATEST関数の要点は下記の通りだ。

  • GREATEST関数は指定した引数の中での最大値を返してくれる関数
  • 列(カラム)同士の値を比較して大きい方を取得したい時に便利
  • 列と定数を比較することも可能
  • 指定したカラムの中にNULLが含まれている場合、結果がNULLになる点には要注意

他のBigQueryに関する関数は下記で紹介しているので是非参考にして欲しい。

BigQuery関数一覧

 

おすすめの記事