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?

Markdown AIを使った記事を投稿しよう!

ActiveRecordTips①~関連データの数による検索(n個以上、n個以下)

Last updated at Posted at 2024-11-15

はじめに

レコードを抽出する際に関連データの数で絞り込みたいことがありますが毎回「大体こんな感じだったけどあってたっけ?」てなるのでまとめておく。
ActiveRecordのTipsは今後も出していきたいので「こんな抽出はどうやるの?」的なものがあればコメントください!

関連データの数による検索

1対Nの関連付けのテーブル構造で子の数によっての検索
nとかmとかは数字に置き換えてください。

子レコードがない親レコードの抽出

Parent.left_outer_joins(:children)
      .where(children: { id: nil })

子レコードがn個以上

Parent.joins(:children)
      .group('parents.id')
      .having('COUNT(children.id) >= ?', n)
      .select('parents.*, COUNT(children.id) as children_count')

子レコードがn個以下

Parent.joins(:children)
      .group('parents.id')
      .having('COUNT(children.id) <= ?', n)
      .select('parents.*, COUNT(children.id) as children_count')

子レコードがm個以上n個以下

Parent.left_joins(:children)
      .group('parents.id')
      .having('COUNT(children.id) BETWEEN ? AND ?', m, n)

子レコードが一番多いレコードの取得

Parent.joins(:children)
      .select('parents.*, COUNT(children.id) AS children_count')
      .group('parents.id')
      .order('children_count DESC')
      .first

最後に

間違っている箇所があればコメントください🙇‍♂️
またrailsでできるお仕事くらはい🙏

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?