2017-07-02 51 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. 

任何解决方案?

编辑:

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

尝试将合计移动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, [Cake].cake_name 
having  sum([Ingredient].nrOfCal) < 500; 
+0

现在错误消失了,但sql不起作用.. – IleNea

+0

我不知道您的数据,也许您应该用nrOfCal乘以IngredientCake.quantities? – McNets

+0

我编辑过,现在很奇怪。 – IleNea

0

因为你的条件是聚合值,则需要使用HAVING条款(group by后执行),而不是where

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