2011-11-11 8 views
1

類似のタイプの書籍の平均価格を超える書籍の価格を返すクエリを作成する必要があります。だから、私は以下のクエリを使用してこれをした:それは、このエラーがスローしかしサブクエリが1つ以上の値を返しました

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

subquery returned more than 1 value 

>値のリストに使用することができないという理解を。しかし、私はこれを解決できる方法を知りたがっていました。私が使用する必要があるクエリを教えてください。 DBは、あなたが複数のタイプを持っているので、それぞれのタイプが平均を返す同様の種類のパブ

titles table: 

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

ので、私は価格>平均(価格)とタイトルを取得する必要があります

+0

あなたの「タイトル」テーブル内の1つの「タイプ」が複数ある場合は、別にグループが複数の行が発生します。テーブル全体の平均価格だけが必要な場合は、サブクエリの「グループ」を削除します。 – GShenanigan

+0

あなたはSQLのフレーバーを使用していますか? –

答えて

3

です。あなたはその価格の平均タイプのすべてのより高いタイトルを探している場合

あなたがアイテム

のリストを見るためにSOME|ANYまたはALLオペレータに見ることができ、この例は次のようになります。

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

あなたは同様にあなたのニーズに合わせてSOMEまたはANYALLを変更することができます。

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

上記のクエリは、すべてのタイトル価格の平均を比較することを前提としています。スカラー値が返され、クエリが成功するようになります。

+0

でも同様の型の平均値を取得し、価格列 – Sayamima

+0

@ Nishanthをチェックすると、サブクエリ内にフィルタを1つだけ返すようにする必要があります。 'titles'テーブルに関する情報を私に与えたら、あなたのために書くことができます。 –

+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 –

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

関連する問題