下载由下载时间、下载时间 ID 和 buno ID 组成。故障由故障代码、下载时间 ID、状态和类型组成。一次下载可以有很多错误,并且可以加入下载时间ID。
给定一组故障代码,结果必须包含具有相应故障计数的每个故障代码。如果在下载中未找到故障代码,则必须返回故障代码,故障计数为零。
这个问题似乎需要一个 OUTER JOIN,但在 Postgres 上没有看到它按预期工作,因为它似乎没有从 LEFT 表返回带有空值的集合。
查询如下,为简洁起见省略了一些细节:
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 子句采用错误代码 IN 语句:
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
谢谢大家的帮助!喜欢这个网站!