User.count(:all, :group => "name")
を使用すると、複数の行が表示されますが、それは私が望むものではありません。私が欲しいのは行の数です。どうすれば入手できますか?
現在 (18.03.2014
- Rails 4.0.3
)これは正しい構文です:
Model.group("field_name").count
カウントを値として持つハッシュを返します。
SurveyReport.find(30).reports.group("status").count
#=> {
"pdf_generated" => 56
}
User.count
_はユーザーの総数を示し、次のSQLに変換されます:SELECT count(*) AS count_all FROM "users"
User.count(:all, :group => 'name')
は、一意の名前のリストとその数を示し、次のSQLに変換されます。SELECT count(*) AS count_all, name AS name FROM "users" GROUP BY name
上記のオプション1が必要だと思いますが、正確に何が必要/必要かはわかりません。
おそらく、ユーザーの個別の名前を数えたいですか?
User.count(:name, :distinct => true)
データベースにJohn、John、Jane、Joeyなどの名前のユーザーがいる場合は3を返します。
________
| name |
|--------|
| John |
| John |
| Jane |
| Joey |
|________|
User.find(:all、:group => "name")。countを使用してみてください
幸運を!
私はうまくいくように見える奇妙な方法を見つけました。グループ化カウントから返された行をカウントします。
________
| name |
|--------|
| Bob |
| Bob |
| Joe |
| Susan |
|________|
User.group(:name).count
# SELECT COUNT(*) AS count_all
# FROM "users"
# GROUP BY "users"."name"
=> {
"Bob" => 2,
"Joe" => 1,
"Susan" => 1
}
User.group(:name).count.count
=> 5
これは私が遭遇した興味深いものですが、それはすべての行にカウントを追加し、アクティブレコードランドではあまりうまく機能しないため、かなりハッキーです。これをArel/ActiveRecordクエリに取り込むことができたかどうかは覚えていません。
SELECT COUNT(*) OVER() AS count, COUNT(*) AS count_all
FROM "users"
GROUP BY "users"."name"
[
{ count: 3, count_all: 2, name: "Bob" },
{ count: 3, count_all: 1, name: "Joe" },
{ count: 3, count_all: 1, name: "Susan" }
]