2013-10-16 51 views
0

我会前期分组,这是一个家庭作业的问题,但我一直停留在这一个小时,我只是一直在寻找正确的方向推。首先我给你的关系和背景的硬件问题,那么我会解释我的问题:SQL与“无效使用组的”错误

分公司(的bookcode,BranchNum,现有量)

HW问题:列出BranchNum对于具有所有分支机构至少有一本手册至少有10本。

我的问题:我明白,我必须通过的bookcode分组的SUM(现有量),但我怎么然后采取和组它通过BranchNum?这在逻辑上是我想出各种版本:“无效使用组功能的”

select distinct BranchNum 
from Inventory 
where sum(OnHand) >= 10 
group by BookCode; 

,但我不断收到一个错误,指出

可能有人请解释一下什么是错在这里?

更新: 我现在明白了,我不得不使用HAVING语句,基本形式是这样的:

select distinct (what you want to display) 
from (table) 
group by 
having 
+1

* push * - > http://www.techonthenet.com/sql/having.php – Phil

+1

我猜你需要使用'HAVING sum(OnHand)> = 10''WHERE子句',参见[这里](http://stackoverflow.com/questions/2330840/mysql-invalid-use-of-group-function) –

+2

您应该将所有“非汇总”列,即所有列未汇总,统计等。 –

回答

0

试试这一个。

SELECT BranchNum 
FROM Inventory 
GROUP BY BranchNum 
HAVING SUM(OnHand) >= 10 

您还可以找到GROUP BY子句与例如here.

0

虽然在问题的所有评论似乎是有效的,并添加它们似乎都缺少为什么你的查询是不工作的信息。原因很简单,并且与计算sum的状态/阶段严格相关。

where子句将得到执行的第一件事。这意味着它会在开始时过滤所有行。然后group by将生效,并将合并在该子句中未指定的所有行并应用聚合函数(如果有)。

所以,如果你试图将一个聚合函数添加到你要汇总数据之前被分组,甚至过滤where条款。 having子句在group by之后执行,允许您过滤聚合函数,因为它们已经被计算。

这就是为什么你可以写HAVING SUM(OnHand) >= 10,你可以不写WHERE SUM(OnHand) >= 10

希望这会有所帮助!