【図解あり】BigQuery GREATEST関数の使い方|最大値の取得方法とNULLの扱いも解説

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

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

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

スポンサーリンク

GREATEST関数とは?

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

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

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

datesales_1sales_2sales_3
2024-02-01108751552213930
2024-02-02136261939918906
2024-02-03142031201419154
2024-02-04152211704918333
2024-02-05199531671115858
2024-02-06168811683116389
2024-02-07112491473810247
2024-02-08120691962416680
2024-02-09161761399114603
2024-02-10143371533213864

BQ_GREATEST①

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

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

スポンサーリンク

GREATEST関数の使い方

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

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

BQ_GREATEST②

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

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

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

列同士の比較

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

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

datesales_1sales_2sales_3
2024-02-01108751552213930
2024-02-02136261939918906
2024-02-03142031201419154
2024-02-04152211704918333
2024-02-05199531671115858
2024-02-06168811683116389
2024-02-07112491473810247
2024-02-08120691962416680
2024-02-09161761399114603
2024-02-10143371533213864

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

BQ_GREATEST③

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

BQ_GREATEST⑤

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

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

列と定数の比較

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

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

datesales_1
2024-02-0110875
2024-02-0213626
2024-02-0314203
2024-02-0415221
2024-02-0519953
2024-02-0616881
2024-02-0711249
2024-02-0812069
2024-02-0916176
2024-02-1014337

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になっている。

datesales_1sales_2sales_3
2024-02-01108751552213930
2024-02-0213626null18906
2024-02-03142031201419154

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

BQ_GREATEST⑩

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

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

まとめ

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

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

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

BigQuery関数一覧

 

おすすめの記事