0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel / MYSQL】データベースの値を集計する方法

Posted at

今回はデータベースを集計する方法について解説します。
データベースにあるデータを集計してブラウザに表示したい時の参考にしてください。

開発環境
・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

データの取得と集計

Post.php
    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文でも試したい方は下記に記載しておくので試しておいてください。

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を使用せずに一つ一つ取得することも可能ですが、
それだと冗長的なコードになってしまうので、うまく活用して保守性の高いコードを目指していきましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?