0

学习having子句和平均值(之前做过AVG),我不得不承认,我很困惑。我将在这里发布一个问题,这是本周作业中最简单的问题之一,并请某人用“现实世界”术语(不是教科书语言,充其量是稀疏的)向我解释它。我有点明白什么我需要这样做,但是在同一列中平均多个值让我有些困惑,就像使用“拥有”而不是“位置”一样。

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 来选择将返回哪些 ROWS?到目前为止很明显,对。但是,当您将多行中的值聚合为一个返回值时,如果您想对这些值执行一些过滤,则必须使用 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

我有意简化了这里的数据,但您可能会看到它是如何应用的。另一个例子是显示所有书籍平均价格低于 10 美元的作者:

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

如果您尝试在这里使用 WHERE,您所能做的就是过滤掉单本书价格较低的行:

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

这当然是错误的答案,主要是因为它会失败。但即使它返回一个结果,它也会是所有低于 10 美元的书籍的平均价格——根本不一样。

于 2013-10-08T18:51:51.610 回答