0

hasing 節と平均 (前に AVG を行った) を学び、私は混乱していることを認めなければなりません。ここに問題を投稿します。今週の課題の簡単な問題の 1 つです。誰かに「現実世界」の用語で説明してもらいます (教科書の言語ではなく、せいぜいまばらです)。そうする必要がありますが、同じ列内の複数の値を平均すると、「どこ」よりも「持つ」を使用する場合と同様に、多少混乱します。

SQL> desc inventory
 Name
 ----------------------------
 BOOK_CODE
 BRANCH_NUM
 ON_HAND

SQL> SELECT * FROM INVENTORY;

BOOK BRANCH_NUM    ON_HAND
---- ---------- ----------
0180          1          2
0189          2          2
0200          1          1
0200          2          3
0378          3          2
079X          2          1
079X          3          2
079X          4          3
0808          2          1
1351          2          4
1351          3          2
1382          2          1
138X          2          3
2226          1          3
2226          3          2
2226          4          1
2281          4          3
2766          3          2
2908          1          3
2908          4          1
3350          1          2
3743          2          1
3906          2          1
3906          3          2
5163          1          1
5790          4          2
6128          2          4
6128          3          3
6328          2          2
669X          1          1
6908          2          2
7405          3          2
7443          4          1
7559          2          2
8092          3          1
8720          1          3
9611          1          2
9627          3          5
9627          4          2
9701          1          2
9701          2          1
9701          3          3
9701          4          2
9882          3          3
9883          2          3
9883          4          2
9931          1          2
4

1 に答える 1

0

たぶんこれが役立ちます:

SELECT がどの COLUMNS を返すかを決定する方法を知っていますか? また、返される行を選択するために WHERE を使用しますか? これまでのところ明らかですよね。ただし、複数の行の値を 1 つの戻り値に集計する場合、それらに対して何らかのフィルタリングを実行する場合は、HAVING を使用する必要があります。

例えば:

SELECT author, title
FROM books
WHERE author = 'Twain, Mark'

マーク・トウェインが書いたすべての本のリストが表示されます。

SELECT author, count(*)
FROM books
GROUP BY author

は、各著者によって書かれた本の数を示します。

最後に、3 冊以上の本を書いた著者のみが必要な場合:

SELECT author, count(*)
FROM books
GROUP BY author
HAVING count(*) >= 3

ここでは意図的にデータを単純化しましたが、おそらくそれがどのように適用されるかがわかります。もう 1 つの例は、書籍の平均が $10 未満のすべての著者を表示することです。

SELECT author, average(price)
FROM books
GROUP BY author
HAVING average(price) < 10

ここで WHERE を使用しようとすると、1 冊の書籍の価格が低い行を除外することしかできません。

SELECT author, average(price)
FROM books
GROUP BY author
WHERE price < 10

もちろん、それは主に失敗するため、間違った答えになります。しかし、結果が返されたとしても、それはすべての書籍の平均価格が 10 ドル未満であり、まったく同じではありません。

于 2013-10-08T18:51:51.610 に答える