[CakePHP3]クエリービルダーで少しハマった-CASE、COUNT、SUM

こんな感じのSELECT文をクエリービルダーで作りたかった。

SELECT user_id,SUM(CASE WHEN flg = ‘1’ THEN 1 ELSE 0 END) cnt FROM hoge GROUP user_id

なので、以下のようにしました。

ですが、上記にすると「関数sum(text)は存在しません」とエラーになってしまい、動きませんでした。

ログに出力された実行後のSELECT文は、pgAdminで実行することはできましたが、なぜかクエリービルダーでは上記のエラーになってしまいす。

 

CakePHP3のドキュメントを見たら、COUNT()を使って集計している例があったので、もしかしてこれならいけるのかと思い試してみました。

とりあえず、上記のコードを修正して、COUNT()で集計するようにしました。

これなら想定していたデータが取得できました。

COUNT()は、NULLのデータはカウントされないんですね。知らなかった。。。

 

いままでCOUNT()関数をなんとなく使っていたので、今回こういうことがあって、ちょっと勉強になったのでよかったのかなと思います。