学习有条款和平均值(之前是AVG),我不得不承认,我很困惑。 我将在这里发布一个问题,这是本周任务中较简单的问题之一,并请某人用'真实世界'术语向我解释(不是教科书语言,最多是稀疏的。)我看到了什么我需要这样做,但是在同一列中平均多个值让我感到有些困惑,就像使用'Have'而不是'Where'一样。
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
答案 0 :(得分: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美元 - 根本不一样。