我试图按出版商名称和类别获取图书的平均零售价格。我只想包括类别' 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;
答案 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;