(備忘録)【Rails】groupメソッドについて
自分用の備忘録です。
① Groupによって分類ごとの合計などが求まる
② 集計メソッドとともに使う。
③ 結果はkeyとvalueのHashで返ってくる
④ value名はcount_ageのように自動で決まる
⑤ 条件付けのhavingとwhereは順番が違う
⑥ joinsと結びつけることにより、他のテーブルのグループ化ができる
こちらの記事を参照していきます。
1 groupメソッドのそもそもの使い方
ポイント
指定したカラムごとにデータをまとめることができる。
例 性別 10人中、6人が男性、4人が女性
男性だけの人数の合計、男性だけの身長リスト、女性だけの年齢リストなど、グループごとの情報を抽出できる。
ポイント
Groupメソッドは単体ではなく、集計メソッドと併用する
2 集計メソッドとの併用
User.group(:sex).count
性別ごとの人数を求めたい
⇨男性:6人 女性:4人
ポイント
返り値はkeyとvalueのハッシュになる!!
3 他の集計メソッドの使用例(minimum)
下のようになる
User.group(:sex).minimum(:income)
つまり、収入の最低を調べたい
⇨男性:300万 女性:400万
みたいなのがkeyとvalueのハッシュでもとまる。
4 ランキング機能(order)
知りたい情報は
① ID
② 名前
③ 身長
身長の高い順に並べると
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人
こんな感じになる
そして、おそらくここがポイント
今回の例えば10代:5人の5人はどうやって指定したら良いかという部分。
今回は年齢をカウントしているので自動的にcount_ageと決まっている
6 Groupに条件をつける(having)
例 25歳:5人 30歳:7人 35歳:8人 40歳:5人
上はすでにグループ化が完了している。
25歳より上の人を抽出したい
⇨ 30歳:7人 35歳:8人 40歳:5人(25歳が抜ける)
上のように「having」をつけることで、グループ化できる
条件は「「男性の175センチ以上」または「女性の160センチ以上」」のように細かい指定も可能
7 whereメソッドとhavingメソッドの違い
実行される順番が違う。
1 ①月収15万円以上の②人数(count)
2 ②月収の平均(average)が②15万円以上の年代
このように集計メソッドより
先に行われる ⇨ where
後に行われる ⇨ having
になる。
8 別のテーブルと繋げる
アソシエーションができていることが前提
下のように
① joinsでテーブルを結びつける
② "テーブル名.カラム"
で結びつける
あくまでもUserの人数を知りたい。
職業の名前を持ってきて、
学生:3人 サラリーマン:4人 保育士:2人
のような結果をとってくる。
以上です
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊