2012-05-01 15 views
1

Rails 3アプリケーションに次のコードがあります。Rails 3アクティブなレコードと合計

@clinical_healthplan_spend = Clinical.select("ClientKey as client_key, PVID as animal_key, sum(Payments) as total_payments") 
           .where("ClinicalText LIKE 'Paid by PET HEALTH' AND PVID != 44444") 
           .order("sum(Payments) DESC") 
           .group("animal_key") 

私は次のことを達成しようとしています:最初の最高total_paymentsによって

  1. 注文の結果を。
  2. 制限最初の要件のため、少なくとも1500

のtotal_payment値を持つレコードによってテーブル。

.order("sum(Payments) DESC") 

が動作しても、第二の要件について

.order("total_payments DESC") 

を行いません。

.where("total_payments > 1500") 

は機能しません。

は、私が正しい場所に条件を入れアム、または合計オプションを使用するときにこれらを行うための別の方法はありますか?

助けていただけたら幸いです!

答えて

4

代わりのwhere、あなたはhavingを使用する必要があります。 groupでは、集計を持たないすべてのフィールドを含める必要があります。この場合、animal_keyclient_keyです。それ以外では、私はあなたのコードに何の問題も見ません。これは動作するはずです:

Clinical.select('ClientKey as client_key, PVID as animal_key, sum(Payments) as total_payments') 
    .where("ClinicalText LIKE 'Paid by PET HEALTH' AND PVID != 44444") 
    .group('animal_key, client_key') 
    .having('sum(Payments) > 1500') 
    .order('sum(Payments) DESC') 
+0

を働いていますが、説明できること「そして、あなたのグループにあなたは集計を持っていないすべてのフィールドを含める必要がありますか。」? – dannymcc

+1

あなたは 'animal_key'と' client_key'の組み合わせの合計(これは集合関数(http://en.wikipedia.org/wiki/Aggregate_function)です)を表示します。したがって、 'animal_key'と' client_key'の両方を 'GROUP BY'する必要があります。わかりますか? – Mischa

+0

はい、そうだと思います。説明ありがとう! – dannymcc

関連する問題