0

这是一个家庭作业。我只是不明白该怎么做。

这个特定问题的说明是:

List the branch name for all branches that have at least one
book that has at least 4 copies on hand.

有问题的表格在哪里:

分支:

BranchName        | BranchId
Henry Downtown    |    1
16 Riverview      |    2
Henry On The Hill |    3

存货:

BookId   |  BranchId  |  OnHand
   1     |     1      |     2
   2     |     3      |     4
   3     |     1      |     8
   4     |     3      |     1
   5     |     1      |     2
   6     |     2      |     3

据我了解,我可以通过以下方式获得每个分支名称的 OnHand 数量:

SELECT BranchName, SUM(OnHand) 
FROM Branch B, Inventory I 
WHERE B.BranchId = I.BranchId 
GROUP BY BranchName;

但我不明白如何比较每个分支的 OnHand 和 4 的总和。

任何帮助将不胜感激,伙计们!

4

1 回答 1

1

像这样(假设同一本书可能在不同的分支):

SELECT DISTINCT BranchName 
FROM Branch B, Inventory I 
WHERE B.BranchId = I.BranchId 
GROUP BY BranchName, I.BookId
HAVING SUM(onHand) >= 4;

SQL小提琴

你是这么想的吗?

编辑

如果 Inventory 表为每个分支只列出每本书一次,那么我们可以摆脱按bookidandDISTINCT子句进行分组。

查询变为:

SELECT BranchName 
FROM Branch B, Inventory I 
WHERE B.BranchId = I.BranchId 
GROUP BY BranchName
HAVING SUM(onHand) >= 4;

SQL Fiddle用于简化查询。

于 2013-10-19T03:49:19.153 回答