试图在Oracle SQL中获得平均值

时间:2014-04-23 02:40:44

标签: sql oracle average

我试图按出版商名称和类别获取图书的平均零售价格。我只想包括类别' CHILDREN'和'计算机'以及平均零售价超过50美元的团体。我被困了!

SELECT PUBLISHER.NAME, BOOKS.CATEGORY
  TO_CHAR(AVG(BOOKS.RETAIL), '99.99') "Avg Retail"
FROM BOOKS, PUBLISHER
WHERE BOOKS.category='CHILDREN' or BOOKS.category='COMPUTER' and AVG > 50;

1 个答案:

答案 0 :(得分:1)

您需要了解有关编写SQL查询的几个方面。

首先,始终使用显式join语法。一个简单的规则是:永远不要在from子句中使用逗号。

其次,你需要join两个表格。我猜测像PublisherId这样的字段,但你可能真的知道正确的字段。

第三,in比一系列or条款更清晰。

四,您不能在avg()条款中包含where。这就是having子句的目的。

五,如果你正在做一个期望多个结果行的聚合,你需要一个group by

SELECT p.NAME, b.CATEGORY, TO_CHAR(AVG(b.RETAIL), '99.99') as "Avg Retail"
FROM BOOKS b JOIN
     PUBLISHER p
     on b.PublishedId = b.PublisherId
WHERE b.category in ('CHILDREN', 'COMPUTER')
GROUP BY p.NAME, b.CATEGORY
HAVING AVG(b.RETAIL) > 50;