2011-10-24 2 views
0

내가 가지고있는 다음과 같은 필드가 판매라는 테이블 :레일 선택 및 그룹 사용자 정의 SQL은 호출

id (integer) 
quantity (integer) 
product_id (integer) 
payment_method (string - bad I know) 

나는 구글 시각화 API까지이 기록을 훅하고 싶지만 처음에는 실제로 필요를 내가 원하는 방식으로 데이터를 표시 할 수 있습니다. Google 시각화 통합은 문제가 아닙니다. 문제는 무엇입니까? group() 함수 또는 select() 함수를 원하는대로 할 수없는 것입니다.

나는 그 그룹이 내가 원하는 것을 알지 못하지만 근본적으로 제품 당 판매 합계를 payment_method으로보고 싶습니다.

내 원래의 아이디어는

.select("SUM(quantity) as total_sold", :product_id).group(:payment_method) 

과 같을 것이다하지만 그건 정말 제품별로 정렬 도움이되지 않는 것이 었습니다. 데이터를 다음과 같이 표시하고 싶습니다.

CASH SALES: 
    Product A: 103 sales 
    Product B: 32 sales 
    Product C: 87 sales 
CREDITCARD SALES: 
    Product A: 23 sales 
    Product B: 43 sales 
    Product C: 12 sales 
DONATION SALES: 
    Product A: # sales 
    Product B: 43 sales 
    Product C: 12 sales 

도움이 되셨습니까?

답변

0
.select("SUM(quantity) as total_sold", :product_id).group(:payment_method, :product_id) 

먼저 지불 방법, 제품 ID별로 결과 집합을 그룹화합니다.

+0

나는 오류가 계속 : "인수 오류 :

.select("SUM(quantity) as total_sold, payment_method, product_id").group(:payment_method, :product_id) 

레일 콘솔을 사용하여 테스트.? 잘못된 인수 번호 (1 2) query_methods.rb에서 어떤 생각을 – jyanks

+0

I 우리는 select 메소드에 대해 두 개의 매개 변수를 전달할 수 없다고 생각하므로 .select ("SUM (quantity) as totla_sold, product_id")로 지정하십시오. – nkm

+0

product_id 및 : product_id를 사용하여 시도해 보았습니다. 수량 및 수량과 동일한 문제 – jyanks

0

하나의 문자열 안에 모든 열을 선택하여 유지하십시오. 생성 된 SQL은 "있는 그대로"사용합니다. 문자열을 닫고 두 번째 매개 변수를 심볼 :product_id으로 선택하지 않아도됩니다. select에서 group by의 모든 열을 추가하는 것도 중요합니다. .order("payment_method, product_id")도 고려하십시오.

Product.select("product_line_id, public_product_id pp_id, count(product_id) num_products") .group("product_line_id, public_product_id").map{|p| "Public Prod Id: #{p.pp_id} has #{p.num_products} products " } 

Product Load (0.2ms) SELECT public_product_id pp_id, count(product_id) num_products FROM products GROUP BY products . public_product_id => [ "Public Prod Id: 5 has 1 products ", "Public Prod Id: 6 has 2 products ", "Public Prod Id: 8 has 1 products ", ... ]