sql查询计数结果为零的事件记录不存在

sqougxex  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(345)

我对sql查询(oracle数据库)有一个问题。
我有两张table。一张表是“事故”,另一张表是“原因”。第二个is表有一些预定义的默认值。

- REASONS -

Reason 1
Reason 2
Reason 3
Reason 4

现在在事故表中,我们插入上表中的一些事故和原因,如下所示

- ACCIDENTS -

Accident 1  - Reason 1
Accident 2  - Reason 1
Accident 3  - Reason 4

所有我想得到的统计事故组的所有4个原因,即使一个原因不存在于事故表。在这种情况下,我想得到count=0,如下所示:

REASONS   COUNT (of Accidents)
Reason 1    2
Reason 2    0
Reason 3    0
Reason 4    1

我已经尝试了不同类型的联接表,但没有得到结果,原因2和原因3,因为它们在表中不存在。每次结果是:

REASONS   COUNT (of Accidents)
Reason 1    2
Reason 4    1

有什么解决方案/想法吗?
提前谢谢!
更新!
以下是查询:

SELECT R.REASON_NAME AS REASON, COUNT(A.ID) AS COUNT_OF_ACCIDENTS
FROM ACCIDENTS A
RIGHT JOIN REASONS R ON R.ID = A.REASON_ID
WHERE EXTRACT(YEAR FPOM A.DATE_OF_ACCIDENT) = 2017
GROUP BY R.REASON_NAME

如果我删除where语句,那么我就正确地得到了所有的原因,但是where for year in accidents表是必需的。

t8e9dugd

t8e9dugd1#

你想要一个 left join 和聚合:

select r.reason, count(a.reason)
from reasons r left join
     accidents a
     on r.reason = a.reason and
        a.date_of_accident >= date '2017-01-01' and
        a.date_of_accident < date '2018-01-01'
group by r.reason;

相关问题