SQL(Oracle 12c):如何从另一个选择语句(嵌套?/子查询?)中选择结果

时间:2019-07-17 11:52:37

标签: sql oracle12c

我正在为我正在学习的SQL入门课程处理家庭作业问题。本周的主题是摘要功能。这是问题所在:

通过出版商名称和类别确定书籍的平均零售价格。仅包括“儿童和计算机”类别以及平均零售价大于50美元的组。

以下是相关表格的图片:

enter image description here

enter image description here

我编写了此查询,该查询按发布者名称和类别返回平均零售价,但无法弄清楚如何仅返回超过50美元的平均零售价。

select p.name, b. category, avg(b.retail)
from books b, publisher p 
where b.pubid = p.pubid
and b.category in ('CHILDREN','COMPUTER')
group by p.name, b.category;

上面的代码返回以下内容:

enter image description here

发布商Reed-N-Rite的平均零售价低于$ 50-需要在查询中添加哪些内容,以便我可以将语句中的结果过滤为零售价大于$ 50的那些?

2 个答案:

答案 0 :(得分:2)

当使用聚合函数(如avg)时,必须在其他列上使用group by,而在使用group by时,必须在聚合列上使用have for set where子句。 为此,使用“具有”:

select p.name, b. category, avg(b.retail)
from books b, publisher p 
where b.pubid = p.pubid
and b.category in ('CHILDREN','COMPUTER')
group by p.name, b.category 
having avg(b.retail) > 50

答案 1 :(得分:0)

向您的查询添加HAVING子句。 HAVING适用于组功能:

select p.name, b. category, avg(b.retail)
from books b, publisher p 
where b.pubid = p.pubid
and b.category in ('CHILDREN','COMPUTER')
group by p.name, b.category
having avg(b.retail) > 50;