子查询返回的值超过1

时间:2011-11-11 17:32:32

标签: sql

我必须写一个查询,它返回的书籍价格大于同类书籍的平均价格。所以,我使用以下查询做到了这一点:

select title
from titles
where price >
(
   select avg(price)
   from titles
   group by type
)

然而它会抛出此错误:

subquery returned more than 1 value

>可以理解不能用于值列表。但我想知道我能解决这个问题的方法。请让我知道我需要使用的查询。数据库是pubs

titles table:

title_id , title, type, price, advance, notes, sales

所以我需要以价格>获得标题相似类型的平均(价格)

4 个答案:

答案 0 :(得分:4)

关键是使用主查询中的类型来过滤子查询中的类型。

SELECT t.title 
    FROM titles t 
    WHERE t.price > (SELECT AVG(t2.price) 
                         FROM titles t2
                         WHERE t2.type = t.type)

答案 1 :(得分:3)

您有多种类型,因此每种类型都返回平均值。

您可以查看SOME|ANYALL运算符以查看项目列表

如果您正在寻找价格高于所有平均类型的标题,举例如下:

SELECT title
FROM titles
WHERE price > ALL
(
   SELECT AVG(price)
   FROM titles
   GROUP BY type
)

您可以类似地将ALL更改为SOMEANY以满足您的需求。

答案 2 :(得分:1)

select title 
from titles 
where price > 
(select avg(price) from titles) 

上述查询假设您希望比较所有标题价格的平均值。这将返回标量值并允许您的查询成功。

答案 3 :(得分:0)

您需要链接子查询和主查询中的类型,例如:

select
   a.title
from
   titles a
where
   a.price > ( select avg(b.price) from titles b where a.type = b.type group by b.type)