2011-11-11 129 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