私はこれを何時間も遊んでいて、私が望む結果を得ることができません。これが私が問題を抱えているクエリです:
SELECT year.year, dstate,
(SELECT sum(amount) FROM gift
WHERE year.year = gift.year
AND gift.donorno = donor.donorno)
FROM donor, gift, year
WHERE year.year = gift.year
AND gift.donorno = donor.donorno;
これは冗長なようです。とにかく、各州の寄付総額(gift.amount)を年ごとに表示しようとしています。
ex.
1999 GA 500 (donorno 1 from GA donated 200 and donorno 2 from GA donated 300)
1999 FL 400
2000 GA 600
2000 FL 500
...
寄付者が同じ州から来ている可能性があることを明確にするために、私はそれが寄付された年のその州の贈り物の金額を合計しようとしています。アドバイスをいただければ幸いです。答えは目の前にあるような気がします。
これは非常に単純な結合と集約の問題です。
SELECT y.year, d.state, SUM(g.amount) AS total
FROM gift AS g
INNER JOIN year AS y ON y.year=g.year
INNER JOIN donor AS d ON d.donorno=g.donorno
GROUP BY y.year, d.state
合計金額を取得するために、SELECT句にサブクエリを含める必要はありません。グループ化することで合計できます。(このGROUP BY
句はあなたが見逃しているものだと思います。それを読むことをお勧めします。)あなたが行ったことは相関サブクエリと呼ばれ、計算する必要があるため、大きなデータセットでは非常に遅くなります。集合演算としてではなく、行ごとに。
また、古いスタイルのコンマ結合構文は使用しないでください。代わりに、上記の明示的な結合構文を使用してください。それははるかに明確であり、偶発的なデカルト積を回避するのに役立ちます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加