今回はデータベースを集計する方法について解説します。
データベースにあるデータを集計してブラウザに表示したい時の参考にしてください。
開発環境
・PHP8.0.8
・Laravel 9.52.8
・MacOS M1チップ
SQLで集計する時の流れ
CRUD処理ができるようになると登録したデータを集計して画面上に表示させたい!と思いますよね。
基本的な流れは以下の通りです。
1.取得したデータをGROUPBY句で集計
2.集計した列をCOUNT関数で件数を取得
参考:https://readouble.com/laravel/9.x/ja/queries.html#grouping
データの取得と集計
public function countTodos($user_id)
{
return Post::selectRaw('user_id, COUNT(user_id) AS count')->groupBy('user_id')->get();
}
selectRaw
はSQl文を直接使用したい時に使用します。
今回はCOUNT関数を使用したいので、selectRaw
を使用しています。
さらにGROUPBY句でuserが何人いるかを集計していきます。
注意すること
ここまでで一応集計の流れは終わりですが、ここで注意点があります。
まずGROUPBY句を使用する場合はSELECT文に同じ値が必要です。
そうしないとうまく処理されないので注意が必要です。
SQL文でも試したい方は下記に記載しておくので試しておいてください。
SELECT user_id, COUNT(user_id) AS count FROM todos GROUP BY user_id;
+---------+----------------+
| user_id | COUNT(user_id) |
+---------+----------------+
| 1 | 13 |
| 2 | 10 |
| 3 | 10 |
| 4 | 10 |
| 5 | 10 |
+---------+----------------+
5 rows in set (0.00 sec)
GROUPBY句を活用することでうまく集計することが可能です。
GROUPBYについて詳しく知りたい方は下記記事も参考にしてください。
参考:https://style.potepan.com/articles/22202.html#SQLGROUP_BYCOUNT
まとめ
集計するための流れは以下です。
1.取得したデータをGROUPBY句で集計
2.集計した列をCOUNT関数で件数を取得
注意点としてはGROUPBYの記載方法ですね。
GOUOBYを使用せずに一つ一つ取得することも可能ですが、
それだと冗長的なコードになってしまうので、うまく活用して保守性の高いコードを目指していきましょう。