0

我会坦率地说,这是一个家庭作业问题,但我已经坚持了几个小时,我只是在寻找正确的方向。首先我会给你背景的关系和硬件问题,然后我会解释我的问题:

分支(BookCode、BranchNum、OnHand)

硬件问题:列出所有至少有一本至少有 10 册的书的分支的 BranchNum。

我的问题:我知道我必须采用按 BookCode 分组的 SUM(OnHand),但是我该如何采用它并按 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 
4

2 回答 2

0

试试这个。

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

您还可以在此处找到 Group By Clause 的示例。

于 2013-10-16T05:46:05.853 回答
0

尽管问题中的所有评论似乎都是有效的并添加了信息,但它们似乎都缺少您的查询不起作用的原因。原因很简单,并且与计算的状态/阶段严格相关sum

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

因此,如果您尝试将聚合函数添加到where您尝试在数据被分组甚至过滤之前进行聚合的子句。该having子句在 之后执行,group by并允许您过滤聚合函数,因为它们已经被计算过。

这就是为什么你可以写HAVING SUM(OnHand) >= 10而你不能写的原因WHERE SUM(OnHand) >= 10

希望这可以帮助!

于 2013-10-16T05:48:02.330 回答