下載包含下載時間,下載時間標識和buno ID。 故障由故障代碼,下載時間標識,狀態和類型組成。下載可能有許多錯誤,可以通過下載時間ID加入。左側外部加入Postgres不返回空值
給定一組的故障代碼,結果必須包含每個故障代碼與對應的故障計數。如果在下載中沒有找到故障代碼,則故障代碼必須返回,故障計數爲零。
這個問題似乎需要一個OUTER JOIN,但隨着預期的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,有取故障代碼語句的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
謝謝大家的幫助!喜歡這個網站!
你分析了你的數據嗎?我懷疑這是PostgreSQL中的問題......請問您可以在[SQL Fiddle](http://sqlfiddle.com/)中提供表結構和示例數據嗎? – vyegorov
'download_time d LEFT OUTER JOIN fs_fault f ON f.downloadtimeid = d.id'具有'download_time'作爲左表,而不是'fs_fault'。連接條件與連接中左側或右側的表無關。 – JayC