ダウンロードは、ダウンロード時間、ダウンロード時間ID、およびbunoIDで構成されます。障害は、障害コード、ダウンロード時間ID、ステータス、およびタイプで構成されます。ダウンロードには多くの障害があり、ダウンロード時間IDで参加できます。
一連の障害コードが与えられた場合、結果には、対応する障害カウントを持つ各障害コードが含まれている必要があります。ダウンロードでフォールトコードが見つからない場合は、フォールトカウントをゼロにしてフォールトコードを返す必要があります。
この問題にはOUTERJOINが必要なようですが、LEFTテーブルからnullを含むセットを返さないようであるため、Postgresでこれが期待どおりに機能することは確認されていません。
クエリは以下のとおりですが、簡潔にするためにいくつかの詳細は省略されています。
SELECT f.faultcode, f.downloadtimeid, d.downloadtime, count(*) as faultcount
FROM download_time d
LEFT OUTER JOIN fs_fault f ON f.downloadtimeid = d.id
AND f.faultcode IN (1000,1100)
AND f.statusid IN(2, 4)
WHERE (d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012')
AND d.bunoid = 166501
GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultcode
翌日、答えを表示するように編集しました。すべての回答は密接であり、さまざまな支援要素がありました。しかし、JayCの答えが最も近いものでした。 これが最終的なSQLであり、フォールトコードのINステートメントをとるWHERE句としての唯一の変更点があります。
SELECT f.faultcode, f.downloadtimeid, d.downloadtime, count(*) as faultcount
FROM download_time d
RIGHT OUTER JOIN fs_fault f ON f.downloadtimeid = d.id
AND f.statusid IN(2, 4)
AND d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012'
AND d.bunoid = 166501
WHERE f.faultcode IN (1000,1100)
GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultcode
ありがとう、すべてあなたの援助に!このサイトが大好きです!