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

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

たとえば「全ての注文が出荷済みか」「全社員が研修を完了しているか」などだ。

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

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

スポンサーリンク

LOGICAL_ANDとは?

LOGICAL_ANDは集約関数の一つであり、複数レコードの中で指定した条件や式がすべてTRUEかどうかを判定できる関数 だ。

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

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

このクエリは、全ての商品についてstock_quantityが1以上であればTRUEを返し、1つでも在庫切れの商品があれば、下記のようにFALSEを返す。

LOGICAL_ANDの例①

このようにLOGICAL_ANDは、品質管理やフラグ判定、システム監査などさまざまな現場で幅広く活用されている便利な関数だ。

なぜLOGICAL_ANDが必要なのか?

通常、個々の行に対してWHERE句で条件判定を行うだけでは「全部を満たしているか」の集約的な判定は難しい。

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

一方で、LOGICAL_AND関数を使うことで、より簡潔かつ効率的に「すべてがTRUEか」を確認できるようになる。

クエリもシンプルになるし、データの異常値をチェックする際にも非常に便利なので、個人的にはよく使っている。

スポンサーリンク

LOGICAL_ANDの基本構文と使い方

基本構文

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

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

シンプルな使用例

このクエリの結果がTRUEであれば、全ての注文が出荷済み、FALSEであれば未出荷の注文が1件以上あることを意味する。

GROUP BYとの組み合わせ

たとえば、顧客ごとに全ての注文が出荷済みかどうかを判定したい場合、次のようなクエリになる。

LOGICAL_ANDとGROUP BY

上記の場合はcustomer_id = 10 の人だけ全ての注文が出荷済みになっていないことがわかる。

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

LOGICAL_ANDが活きる実務例

LOGICAL_ANDは「すべてがTRUEかどうか」の判定が求められる実務シーンで特に威力を発揮する。

例1:全従業員が研修を修了しているか判定したい

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

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

部署(department)ごとにグループ化して、その部署の中で全員が研修完了(training_completed)されているかをチェックする。

これにより、部署ごとに全員が条件を満たしているかを一目で確認できる。

NULLやFALSEを含む場合の挙動

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

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

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

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

CASE WHENとの組み合わせ例

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

 

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

まとめ

LOGICAL_ANDは「すべてが条件を満たしているか?」を一括判定できる強力な集約関数だ。

フラグの一括検証や品質チェックなど、様々なシーンで重宝する。

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

業務要件を的確に反映した論理判定を行うために、LOGICAL_ANDの仕様と特徴を理解し、CASE式などと柔軟に組み合わせて使いこなしてほしい。

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

おすすめの記事