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 テーブルが各本をブランチごとに 1 回だけbookidリストする場合、 andDISTINCT節によるグループ化を取り除くことができます。

クエリは次のようになります。

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 に答える