1

Rails3アプリケーションに次のコードがあります。

@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")

私は次のことを達成しようとしています:

  1. 最初に、total_paymentsが最も高い順に結果を並べ替えます。
  2. total_payment値が1500以上のレコードでテーブルを制限します。

最初の要件について。

.order("sum(Payments) DESC")

動作せず、動作しません

.order("total_payments DESC")

2番目の要件について。

.where("total_payments > 1500")

動作しません。

条件を適切な場所に配置していますか、それとも合計オプションを使用するときにこれらを行う別の方法がありますか?

どんな助けでもいただければ幸いです!

4

1 に答える 1

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')
于 2012-05-01T13:17:45.490 に答える