web-dev-qa-db-ja.com

グループ化してカウントRails

これを見たことはあるが、今は何も見つからない。特定の列でクエリをグループ化し、各グループにいくつあるかを表示できるようにします。私は最初の部分を書き留めました:

@line_items = @project.line_items.all(:group => "device_id")  

これは広告申込情報のインデックスビュー用で、広告申込情報を表示する単なるテーブルです。広告申込情報がデバイスごとにグループ化されたので、「count」の表に列を作成するにはどうすればよいですか?

51
tladuke

line_itemscountを実行すると、device_idcountの順序付きハッシュが返されます。

@project.line_items.group(:device_id).count
105
Chandra Patni

キーおよび関連するレコード数としてのdevise_idのハッシュ

@project.line_items.group(:device_id).count
11
Sandip Ransing

:selectオプションを追加するだけです:

@line_items = @project.line_items.all(
  :group  => "device_id",
  :select => "device_id, COUNT(*) as count"
)

その後、各@line_itemにはcount属性があります。

8
Alex Reisner

あなたもこれを試すことができると思います。

@project.line_items.group(:device_id).pluck("device_id, count(device_id)")

^^これは、要素 'device_id and count'を持つ配列の配列を提供します

4
bluefoggy

何かのようなもの

 User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id")

うまくいくかもしれない...

3
rogerdpack

カウントのみpluckの場合、ここではgroupよりも速くなります

@project.line_items.pluck(:device_id).count


@project.line_items.pluck(:device_id).uniq.count
2
John Smith

このコミット後:

https://github.com/Rails/rails/commit/a1c05dd8b9bd3623289d3aa73dda2943d620cc34

同じことをする新しい方法があります:

@project.line_items.count(:group => LineItem.arel_table[:device_id])
0
Psylone