2013-04-24 4 views
0

테이블은 다음과 같이PostgreSQL의에서 전체 항목의 합계를 얻기

Orders 
----------- 
user_id 
state 


Items 
----------- 
order_id 
product_id 
total 

Products 
---------- 
user_id 


Users 
--------- 
name 
email 

관계는 다음과 같습니다

User 
has_many :products 

Order 
has_many :items 
belongs_to :users 

Product 
has_many :items 
belongs_to :user 

Item 
belongs_to :items 

나는 제품을 소유 한 사용자 당 items.total의 합을 얻으려면

현재 다음 SQL 문이 있습니다.

SELECT *, SUM(items.total) as totalprice 
FROM "orders" 
INNER JOIN "items" ON "items"."order_id" = "orders"."id" 
INNER JOIN "products" ON "products"."id" = "items"."product_id" 
INNER JOIN "users" ON "users"."id" = "products"."user_id" 
WHERE "orders"."state" = 'complete' 
GROUP BY users.id 
,

또는

Order.complete.joins(:items => {:product => :user}).select("*, SUM(items.total) as totalprice").group('users.id') 

위에서 작동하지 않습니다. 이 일이 쉬워야한다고 생각합니다.

+1

"*이 작동하지 않는 선으로 선택 라인과 그룹에 추가 할 수 있습니다 * "유효한 Postgres 오류 메시지가 아닙니다. –

+0

PG :: 오류 : 오류 : 현재 트랜잭션이 중단되고 트랜잭션 블록이 끝날 때까지 명령이 무시됩니다. <- this error –

+0

쿼리와 관련된 오류 메시지가 아닙니다. 이전 오류의 결과입니다. –

답변

2

쿼리별로 그룹화하면 group by 절에 집계되지 않은 모든 열을 포함해야합니다. 이에 쿼리를 변경하는 경우 당신은 당신이 출력에 더 많은 열을 원한다면, 더 나은 행운

SELECT users.id, SUM(items.total) as totalprice 
FROM "orders" 
INNER JOIN "items" ON "items"."order_id" = "orders"."id" 
INNER JOIN "products" ON "products"."id" = "items"."product_id" 
INNER JOIN "users" ON "users"."id" = "products"."user_id" 
WHERE "orders"."state" = 'complete' 
GROUP BY users.id 

관련 문제