0

テーブルは次のとおりです。

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')

上記は機能しません。これは簡単だと思います。

4

1 に答える 1

2

group by クエリでは、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

出力にさらに列が必要な場合は、それらを選択行とグループ化行に追加します

于 2013-04-24T09:13:39.560 に答える