見出し画像

(備忘録)【Rails】groupメソッドについて

自分用の備忘録です。

① Groupによって分類ごとの合計などが求まる
② 集計メソッドとともに使う。
③ 結果はkeyとvalueのHashで返ってくる
④ value名はcount_ageのように自動で決まる
⑤ 条件付けのhavingとwhereは順番が違う
⑥ joinsと結びつけることにより、他のテーブルのグループ化ができる

こちらの記事を参照していきます。

1 groupメソッドのそもそもの使い方


ポイント
指定したカラムごとにデータをまとめることができる。

例 性別 10人中、6人が男性、4人が女性

男性だけの人数の合計、男性だけの身長リスト、女性だけの年齢リストなど、グループごとの情報を抽出できる。

スクリーンショット 2021-12-21 16.55.49

ポイント
Groupメソッドは単体ではなく、集計メソッドと併用する

2 集計メソッドとの併用

スクリーンショット 2021-12-21 16.57.12

User.group(:sex).count

性別ごとの人数を求めたい
⇨男性:6人 女性:4人

スクリーンショット 2021-12-21 17.04.57

ポイント
返り値はkeyとvalueのハッシュになる!!

3 他の集計メソッドの使用例(minimum)

下のようになる

スクリーンショット 2021-12-21 17.24.40

User.group(:sex).minimum(:income)

つまり、収入の最低を調べたい
⇨男性:300万 女性:400万

みたいなのがkeyとvalueのハッシュでもとまる。

4 ランキング機能(order)

知りたい情報は

① ID
② 名前
③ 身長

スクリーンショット 2021-12-21 17.29.06

身長の高い順に並べると

1位 No.3 鈴木さん 身長:189センチ
2位 No.1 高木さん 身長:178センチ
3位 No.2 青木さん 身長:162センチ

みたいになる。これがselectとorderの組み合わせ

5 groupとorder

グループによる並びかえ

例えば 10代:5人 20代:3人 30代:4人

多い順に並びかえ

1位 10代:5人
2位 30代:4人
3位 20代:3人

こんな感じになる

スクリーンショット 2021-12-21 17.38.38

そして、おそらくここがポイント

今回の例えば10代:5人の5人はどうやって指定したら良いかという部分。

今回は年齢をカウントしているので自動的にcount_ageと決まっている

6 Groupに条件をつける(having)

例 25歳:5人 30歳:7人 35歳:8人 40歳:5人

上はすでにグループ化が完了している。

25歳より上の人を抽出したい
⇨ 30歳:7人 35歳:8人 40歳:5人(25歳が抜ける)

スクリーンショット 2021-12-21 17.44.55

上のように「having」をつけることで、グループ化できる

条件は「「男性の175センチ以上」または「女性の160センチ以上」」のように細かい指定も可能

7 whereメソッドとhavingメソッドの違い

実行される順番が違う。

1 ①月収15万円以上の②人数(count)
2 ②月収の平均
(average)が②15万円以上の年代

このように集計メソッドより

先に行われる ⇨ where
後に行われる ⇨ having

になる。

8 別のテーブルと繋げる

アソシエーションができていることが前提

下のように

① joinsでテーブルを結びつける
② "テーブル名.カラム"

で結びつける

スクリーンショット 2021-12-21 18.10.04

あくまでもUserの人数を知りたい。

職業の名前を持ってきて、

学生:3人 サラリーマン:4人 保育士:2人

のような結果をとってくる。


以上です


サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊