2017-07-02 4 views
0

ことで私は、次のSQLの図があります。すべてのケーキは少ないグループより合計

Category: 
id_category 
category_name 

Measurement 
id_measurement 
name_measurement 

Ingredient 
id_ingredient 
name_ingredient 
category_id 
measurement_id 
nrOfCal 

IngredientCake 
id_ingredient 
cake_code 
quantities 

Cake 
cake_code 
cake_name 

を私が500未満のカロリーを持っているすべてのコードと名前のケーキを表示する方法を知りません。

select [Cake].cake_code , [Cake].cake_name 
from  [Cake] 
inner join [Ingredient_Cake] 
on   ([Cake].cake_code = [Ingredient_Cake].cake_code) 
inner join [Ingredient] 
on   ([Ingredient_Cake].id_ingredient = [Ingredient].id_ingredient) 
where  sum([Ingredient].nrOfCal) < 500 
group by [Cake].cake_code; 

をとにかく、それは私にエラーを与える: は何私が試した

An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference. 

任意のソリューション?

EDIT:

select  [Cake].cake_code, 
     [Cake].cake_name 
from  [Cake] 
inner join [Ingredient_Cake] 
on   ([Cake].cake_code = [Ingredient_Cake].cake_code) 
inner join [Ingredient] 
on   ([Ingredient_Cake].id_ingredient = [Ingredient].id_ingredient) 
group by [Cake].cake_code, [Cake].cake_name 
having  sum(nrOfCal*quantities) > 500; 

私が編集しまし、今面白い部分は、私はそのように許可すれば、どのようにそれが必要それは、500よりもカロリーケーキ下の私を返しますが、条件が今あるということです(> 500)、条件を< 500に変更すると、500カロリー以上のケーキだけが返されます。どうしたの?

+0

これを 'having'節に移動しようとしました – McNets

答えて

0

を持つ句に集計を移動しよう:

select  [Cake].cake_code, 
      [Cake].cake_name 
from  [Cake] 
inner join [Ingredient_Cake] 
on   ([Cake].cake_code = [Ingredient_Cake].cake_code) 
inner join [Ingredient] 
on   ([Ingredient_Cake].id_ingredient = [Ingredient].id_ingredient) 
group by [Cake].cake_code, [Cake].cake_name 
having  sum([Ingredient].nrOfCal) < 500; 
+0

エラーはなくなりましたが、SQLは機能しません。 – IleNea

+0

私はあなたのデータを知らないので、IngredientCake.quantitiesにnrOfCalを掛けてください。 – McNets

+0

私は編集しましたが、今は変です。 – IleNea

0

あなたの条件に集計値であるので、あなたの代わりにwhereの(group by後に実行)HAVING句を使用する必要があります:

select [Cake].cake_code , [Cake].cake_name from [Cake] 
inner join [Ingredient_Cake] on ([Cake].cake_code = 
[Ingredient_Cake].cake_code) 
inner join [Ingredient] on ([Ingredient_Cake].id_ingredient 
= [Ingredient].id_ingredient) 
group by [Cake].cake_code 
Having sum([Ingredient].nrOfCal) < 500 
関連する問題