ねこものがたり

いちにちいっぽ

PostgreSQLのbool_or / bool_andで「1件でも当てはまるか」「全件当てはまるか」を調べる

背景

仕事でRailsアプリの開発をしてる最中、件数を出すSQLを書くことがあって「(色々複雑なテーブル結合をした上で)条件に1件でも当てはまったら+1、そうでなければ+-0」という集計をしなければなりませんでした。 条件に1件でも当てはまったらをどうやって書けばいいんだ?と思ったのですが、最近すっかり私の相棒になっているkiroに要件を伝えたところ、「わかった!」という返事と共にbool_orを使って一瞬でやってくれました。kiroのアウトプットの正しさを判断するためにもbool_orについて理解しておきたいと思います。

bool_or

bool_orというのはPostgreSQLの集約関数の1つです。集約関数というのは、複数行を1つにまとめる(=集約する)関数。今回私が知ったbool_orだと、「たくさんある行の中で、1つでも条件に当てはまるものがあったらtrueを返す。そうでなければfalse」を返すという仕事をしてくれるもので、この関数の実行結果はboolean値の1行だけです。

使い方

仮想テーブルを使って試してみました。

SELECT
    bool_or(v)
FROM
    (
        VALUES
            (TRUE),
            (TRUE),
            (FALSE)
    ) AS t (v);

/* => TRUE */

TRUEなものが2件あるので結果はTRUEとなります。 全件FALSEだと、結果はFALSEとなります。

SELECT
    bool_or(v)
FROM
    (
        VALUES
            (FALSE),
            (FALSE),
            (FALSE)
    ) AS t (v);

/* => FALSE */

なるほどわかってきた!

bool_and

ChatGPTに「bool_orのorって何?」って聞いてみたところ、集合で使うORのorだと教えてくれました。その流れでbool_andの存在も知りました。こちらは「ある条件に全件当てはまるか」の集約関数です。

1つでもFALSEがあれば結果はFALSE。全てTRUEならば結果はTRUEです。

SELECT
    bool_and(v)
FROM
    (
        VALUES
            (TRUE),
            (TRUE),
            (FALSE)
    ) AS t (v);

/* => FALSE */
SELECT
    bool_and(v)
FROM
    (
        VALUES
            (TRUE),
            (TRUE),
            (TRUE)
    ) AS t (v);

/* => TRUE */

完全に理解した。

ChatGPTによるbool_orとbool_andの違いの説明

PostgreSQL以外ではどうなのか

bool_or / bool_andという名前の関数は他のDBにはなさそうです。 代わりに使うとしたらMIN / MAXが良い模様。 ということはbool_or / bool_andは簡単便利だけど、DBを乗り換えようと思ったら、その時には実装を変更する必要が出てくるということですね。 使う時には、DB乗り換えの可能性がどれくらいあるのか、集約関数を使わなかった場合にSQLがどれくらい複雑になりメンテナンス性や可読性がどうなるのかといった観点で判断を挟む方が良さそうです。

Rails Girls Tokyo 18thにコーチとして参加しました

2026/02/13-14にクラウドワークスにて開催されたRails Girls Tokyo 18thでコーチをさせていただきました!

railsgirls.com

今回はバレンタイン当日開催ということでバレンタインな感じのデザインで可愛い!

当日の様子

デザインは可愛い、会場は広い、オーガナイザーが色々と気を遣って準備してきているのを感じる!という大変ホスピタリティーにあるふれる1日でした。私はコーチなのでガールズの皆さんに楽しんでいただく側の人のはずだけど、私もすごく楽しかったです!

銅鑼がいた

私の隣に座っておられたガールズの方は、プログラミング未経験の方でしたが、作業が丁寧だし熱心だし、なんと言っても理解力が素晴らしくて、私が「こんな感じっすかね〜(ほんまか?)」みたいな説明をしても「こういうことですね!」と言ってなんかわかってました。楽しんでいただけたのだろうか。楽しかったらいいな!

東京タワーが眩しかった

会中色々な方がお話しされていたように、このワークショップ自体を楽しんでいただけていたら何よりというだけでなく、ガールズの皆さんにとってのRubyコミュニティーで過ごす初めてのいちにちとなって今後も続いていくきっかけになったら本当に本当に嬉しいです。

Fjord Boot Campに入会してちょうど8年

話が大きく変わりますが、私がFjord Boot Campに入会したのが2018/02/14だったのであれからちょうど8年目の日なんだなと思いながらRails Girls Tokyo 18thを迎えました。

当時、わざわざ入会日を覚えようとしていたわけではなく、たまたま記憶に残っていたんですよね。 私は3/14生まれで、かつての私は誕生日を口実にしてバレンタインデーに「私、ホワイトデー生まれなんで、お返し待ってますね😋」って言いながら会社で関わるほぼ全ての人にチョコレートを配って回ったりしてるような生き方をしていたんですよ。よくない意味で自分はここを失ったら生きていけないと思っていたから、とにかく周りに可愛がってもらえるように、気に入ってもらるようにと思いながら生きてたんですよね。

でも2018年のバレンタインはそれをしなかった。当時すで「この仕事をやめてプログラマーとして生きていけるようになりたい」と強く思ってたので、職場の人に気に入られるために時間とお金を使ってる場合じゃないと思ったんですよね。チョコ配るはずの時間にも仕事して一刻も早く退勤したかったんです。「何もしないバレンタイって何年ぶりだろうなー」って思いながら仕事終わりにFBCに連絡して、数時間後には学習が始まっていた。

私にとってすごく印象的で象徴的な日になったので、2018/02/14という日付ごと記憶に残っていたのでした。(ちなみに当時の職場は翌月退職しました)

そんな2/14に、8年の時を経てRails Girls Tokyoのコーチをしているのはなんだか不思議さを感じたりしました。その後家で8年間を振り返ってみて「続けると色々変わるものなんだな」と思えたりして、立ち返ってみる良い機会にもなりました。

Fjord Boot Campを始めた日の日報のスクショ(掲載の許可いただいてます)

最後に

少し前のエントリーに書いたように、バレットジャーナル形式で日々のことを書いているのだけど、流石にRailsGirls当日は朝早かったりして何もかけなかったので、ステッカー等と一緒に後から書き留めました。可愛い!