2011-11-11 132 views
1

我必须编写一个查询,它返回书籍价格高于类似书籍平均价格的查询。所以,我这样做是使用下面的查询:子查询返回多个值

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

但是它抛出这个错误:

subquery returned more than 1 value 

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

titles table: 

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

,所以我需要得到类似类型

+0

如果您在“标题”表中有一个以上的“型”,由该集团将造成多行。如果您只想要整个表格的平均价格,请在子查询中移除“group by”。 – GShenanigan

+0

你使用的是什么风格的SQL? –

回答

3

你有不止一种类型的同价位标题>平均(价格),所以每个类型返回一个平均值。

你可以看看到SOME|ANYALL运营商看项目

如果您正在寻找其价格比所有普通类型的更高的职称名单,这方面的一个例子是:

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

你可以同样改变ALLSOMEANY,以满足您的需求。

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

上面的查询假设您想要所有标题价格的平均值进行比较。这将返回一个标量值并允许您的查询成功。

+0

,但它应该得到相似类型的平均值,然后检查价格列 – Sayamima

+0

@Nishanth,那么你需要在你的子查询中有一个过滤器,以便它只返回一个值。如果你给我更多关于'titles'表的信息,我可以为你写。 – 2011-11-11 17:36:19

+0

我更新了帖子 – Sayamima

4

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

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

OP可能比我的回答+1更多。 –

+0

我同意@AdamWenger。我可以更新我的答案,但它会反映你在这里的确切内容。 +1 – 2011-11-11 17:58:03

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) 
+1

你不需要你的子查询中的群组 – Joon

+0

这是一个事实,我的错误。感谢。 – Hamikzo