前提・実現したいこと
MySql, Rails で質問です。sql初心者です。
下記のような4つのテーブル、モデルがあったとして、
【group】
id | name |
---|---|
1 | a |
【item】
id | group_id | name | amount |
---|---|---|---|
1 | 1 | donut | 2 |
2 | 1 | cake | 5 |
【item_material】
id | item_id | material_id | use |
---|---|---|---|
1 | 1 | 1 | 5 |
2 | 1 | 2 | 5 |
3 | 2 | 1 | 10 |
4 | 2 | 2 | 10 |
【material】
id | name |
---|---|
1 | sugar |
2 | flour |
model
rails
1class Group < ApplicationRecord 2 has_many :items 3end 4 5class Item < ApplicationRecord 6 belongs to :group 7 has_many :item_materials 8 has_many :materials, through: :item_materials 9end 10 11class ItemMaterial < ApplicationRecord 12 belongs to :items 13 belongs to :materials 14end 15 16class Material < ApplicationRecord 17 has_many :item_materials 18 has_many :items, through: :item_materials 19end
やりたいことは、group_id が1の
item の amount と item_material の use を掛けたものの
合計を取得したいです(material_idでgroup byして、material.nameまで取得)。
最終的に欲しいデータは以下のようなイメージです
id | material.name | sum(item.amount * item_material.use) |
---|---|---|
1 | sugar | 60 |
2 | flour | 75 |
発生している問題・エラーメッセージ
Every derived table must have its own alias
該当のソースコード
select item_materials.material_id, item_materials.material_name, sum(total) as sum_use from ( select (item_materials.use * items.amount) as total from ( select item_materials.*, items.id as i_id, items.group_id, items.amount from item_materials left outer join items on item_materials.item_id = items.id where items.group_id = 1) as im left outer join (select materials.id, materials.name from materials) on im.material_id = materials.id ) item_materials group by item_materials.material_id
試したこと
上記コードを試しましたがエラーが出てしまい、うまくいきません。
少しややこしいですが、ご教授お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/01 15:37
2020/03/01 15:47
2020/03/01 23:26