【BigQuery】LOGICAL_OR関数とは?意味や使い方、NULLの挙動まで初心者向けにわかりやすく解説

BigQueryで集計やデータ分析を行う際、「いずれかのデータが特定の条件を満たしているかどうか」を一度に判定したいシーンはたまにある。

たとえば「いずれかの注文が出荷済みか」「誰か1人でも研修を完了しているか」などだ。

これらの条件を一括で評価したいときに便利なのが、LOGICAL_OR関数である。

本記事では、LOGICAL_ORの意味や使い方、実際の業務で役立つ活用例まで、なるべくわかりやすく解説していく。

スポンサーリンク

LOGICAL_ORとは?

LOGICAL_ORは集約関数の一つであり、複数レコードの中で指定した条件や式が少なくとも1つでもTRUEかどうかを判定できる関数だ。

この関数を使うことで、「誰かが条件を満たしているか」や「いずれかのデータが基準をクリアしているか」ということを一度に調べることができる。

例えば、製品テーブルで「いずれかの商品が在庫切れである(在庫数が0)」かどうかを判定したい場合、次のようなクエリになる。

product_idnamestock_quantity
001Laptop10
002Mouse0
003Keyboard5
004Monitor7

このクエリは、1つでも在庫切れの商品(stock_quantity = 0)があれば TRUE を返し、全ての商品に在庫がある場合は FALSE を返す。

今回は Mouse の在庫(stock_quantity)が 0 なので、下記のように TRUE が返される。

LOGICAL_OR

このようにLOGICAL_ORは、アラート判定やフラグ監視、異常検知など様々な現場で幅広く活用できる便利な関数だ。

なぜLOGICAL_ORが必要なのか?

通常、個々の行に対してWHERE句で条件判定を行うだけでは「少なくとも1つが満たしているか」という判定は難しい。

できたとしても、かなり複雑なクエリになることが多い。

一方で、LOGICAL_OR関数を使うことで、より簡潔かつ効率的に「いずれかがTRUEか」を確認できるようになる。

クエリもシンプルになるし、データの異常値や例外ケースを検知する際にも非常に便利なので、LOGICAL_ANDと同じように、個人的によく使っている。

スポンサーリンク

LOGICAL_ORの基本構文と使い方

基本構文

LOGICAL_ORは、ブール型(TRUE/FALSE)の値もしくはブール型を返す条件式を引数に取る。

そして、指定したカラムの値、もしくは条件式の結果が1つでも TRUE であれば TRUE を返し、全てが FALSE または NULL の場合は FALSE または NULL を返す

シンプルな使用例

このクエリの結果がTRUEであれば、「未処理の注文が1件以上ある」ということ。

FALSEであれば、「全ての注文が処理済み」であることを意味する。

GROUP BYとの組み合わせ

例えば、下記注文テーブルにおいて、顧客ごとにいずれかの注文が未処理(status=pending) かどうかを判定したい場合、次のようなクエリになる。

order_idcustomer_idstatus
11001completed
21001completed
31002completed
41002pending
51003completed
61003completed
71004completed
81004completed

上記の場合はcustomer_id = 1002 の人にだけ、has_pending = true となっており、未処理の注文があることがわかる。

LOGICAL_OR2

このように、LOGICAL_ORは直感的な書き方で「いずれかが満たすか」の判定をチェックできる点が特長だ。

LOGICAL_ORの活用シーン

LOGICAL_ORは下記のような「いずれかがTRUEかどうか」の判定が求められる実務シーンで特に威力を発揮する。

例1:従業員の中で誰かが研修を未修了かを判定したい

TRUEであれば未修了者がいる、FALSEなら全員修了済み、という判定が可能となる。

例2:部署ごとに誰かが条件を満たしていないかを判定

部署(department)ごとにグループ化して、その部署の中で誰かが研修未完了(training_completed = FALSE)かをチェックする。

LOGICAL_OR_3

これにより、Salesの部署に未修了者がいることを一目で確認できる。

NULLやFALSEを含む場合の挙動

LOGICAL_ORは、引数の中に TRUE が1つでもあれば必ず TRUE を返す。

全てが FALSE の場合のみFALSEを返すが、すべて NULL の場合のみ NULL を返す。

この全て NULL の場合のみ、というのが注意点だ。

仮に、FALSEとNULLが含まれる場合、NULLはFALSEとみなされ、全体はFALSEとなってしまう。

CASE WHENとの組み合わせ例

もし、「未回答(NULL)」を TRUE 扱いにしたい場合は、CASE式で調整すればOKだ。

この場合、NULL は CASE文でTRUEに変換されるので、1つでも NULL があれば、LOGICAL_ORの結果はTRUEになる。

まとめ

LOGICAL_ORは「いずれかが条件を満たしているか?」を一括判定できる便利な集約関数だ。

異常検知や例外監視など、様々なシーンで重宝する。

一方で、NULLやFALSEの扱い、条件式の書き方には注意が必要なのは、前述したとおりだ。

、LOGICAL_ORの仕様と特徴を理解し、CASE式などと柔軟に組み合わせて使いこなしてほしい。

適切に活用できれば、BigQueryでのデータ集約や一括判定業務を効率化できるはずだ。

おすすめの記事