2009-10-30 3 views
19

User.count(:all, :group => "name")を使用すると、複数の行が表示されますが、それは必要なものではありません。私が望むのは、行数です。どうすれば入手できますか?グループを行単位で数えるには?

+0

[カウントと同時に、グループ化]の可能な重複(http://stackoverflow.com/questions/499767/counting-and-grouping-at-the-same-time) –

答えて

26
  1. User.countはあなたのユーザーの合計数を与えると、次のSQLに変換されます:SELECT count(*) AS count_all FROM "users"
  2. User.count(:all, :group => 'name')は彼らの数と一緒に、あなたのユニークな名前のリストを与えると、このSQLに変換されます:SELECT count(*) AS count_all, name AS name FROM "users" GROUP BY name

私はあなたが上記のオプション1を望んでいると思っていますが、正確にあなたが欲しい/必要としているものは明確ではありません。 (:すべて、:グループは=> "名前")

+0

おかげで、何私はcount_allとしてselect count(*)が必要です(ユーザ名から名前で名前を選択してください) – user199403

+0

その場合、Sikachuの答えはより適切であると思われます - あなたは一意の名前の数を求めます。 – hgmnz

5

はUser.findを使用してみてください。

幸運を数えます!

11

おそらく、ユーザーの別名を数えたいと思いますか?

User.count(:name, :distinct => true) 

は、データベースにJohn、John、Jane、Joeyなどの名前のユーザーがいる場合は3を返します。現在

________ 
| name | 
|--------| 
| John | 
| John | 
| Jane | 
| Joey | 
|________| 
23

18.03.2014 - レール4.0.3)これは正しい構文である:

Model.group("field_name").count 

例えば値としてカウントとハッシュ返しますhgimenez

SurveyReport.find(30).reports.group("status").count 

#=> { 
    "pdf_generated" => 56 
} 
関連する問題