2012-05-01 2 views
1

레일즈 3 애플리케이션에 다음 코드가 있습니다.레일 3 활성 레코드 및 합계

  1. 주문 먼저 가장 높은 total_payments에 의한 결과 :
    @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") 
    

    나는 다음과 같은 달성하기 위해 노력하고 있습니다.
  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

관련 문제