2017-03-25 73 views
-2

enter image description hereSQL:1242サブクエリは複数の行の上

select district, 
    city, 
    postal_code, 
    (
     select sum(amount) as revenue 
     from payment, 
      address 
     group by postal_code 
     ) 
from sakila.address, 
    sakila.city, 
    sakila.payment 
where address.city_id = city.city_id 
group by district, 
    city, 
    postal_code 
order by district, 
    postal_code; 

は私のSQL文で返されます。私はエラーコード1242を持っています。なぜ私にエラーがあるのか​​分かりません。私は、郵便番号で総収入を計算すると同時に、地区、市、郵便番号を入力しようとしています。

何が間違っているのか、それを修正する方法を教えてください。

ありがとうございます。

+0

- クロス(2回)参加するには、ベースを選択し、カンマでサブクエリから複数の行を結合します。サンプルデータと希望する出力を投稿してください。 – GurV

+0

私は ' – Salman

+0

@Salman、問題は(POSTAL_CODE でのお支払いからの収入 、 アドレス グループとして 選択合計(金額))'から来ていると思う - 何も解決しないだろうでも固定。 – GurV

答えて

0

は、あなたがそれ相関サブクエリではなく、グループ化されたクエリにする必要があります...

SELECT address.district, 
     city.city, 
     address.postal_code, 
     SUM(amount) AS revenue 
FROM address 
JOIN city  ON address.city_ID = city.city_ID 
JOIN customer ON address.address_ID = customer.address_ID 
JOIN payment ON customer.customer_ID = payment.customer_ID 
GROUP BY district, city, postal_code 
ORDER BY district, postal_code; 
+0

ようこそ。あなたが私の推論/回答の説明をしたいのなら、自由に言ってください。 – toonice

+0

JOIN ONを使わずに可能な方法はありますか? –

+0

はい、それはあまり効率的ではありません。何か覚えていましたか? – toonice

0

を次のように試してみてください。

select district, 
    city, 
    postal_code, 
    (
     select sum(amount) as revenue 
     from payment, 
      address 
     where postal_code = sakila.address.postal_code 
     ) 

また、それ以外の場合は、それらの間の完全なクロス製品を作成し、paymentaddressテーブル間の加入条件を必要としています。また、メインクエリのpaymentsテーブルの結合条件が必要です。

ANSI JOIN構文を使用してクエリを書くことを学ぶ必要があります。結合条件を忘れる可能性は低くなります。また、相関サブクエリを使用する代わりに、単にpaymentと結合することもできます。 LEFT JOINを使用しましたので、特定の場所に顧客または支払いがない場合はrevenu = 0と表示されます。

完全なクエリは次のようになります。

何が悪いの
SELECT district, city, postal_code, IFNULL(SUM(amount), 0) AS revenue 
FROM address AS a 
JOIN city AS c ON a.city_id = c.city_id 
LEFT JOIN customer AS cus ON cus.address_id = a.address_id 
LEFT JOIN payment AS p ON p.customer_id = c.customer_id 
GROUP BY district, city, postal_code 
ORDER BY district, postal_code 
+0

サブクエリにOPと同じクロス結合があります。 – GurV

+1

私は知っている、私はちょうど答えに何かを追加しました。テーブルについてもっと知っている限り、私はそれを修正する方法を知らない。 – Barmar

+0

私は試みましたが、私は合計の列のすべての同じ値を得ました。 –

関連する問題