SQL Результаты подсчета запросов, поскольку нулевой записи о событии не существует - PullRequest
1 голос
/ 04 августа 2020

У меня проблема с SQL запросом (Oracle база данных).

У меня две таблицы. Одна таблица - «АВАРИИ», а другая - «ПРИЧИНЫ». Эта вторая таблица имеет несколько предопределенных значений по умолчанию.

 - REASONS -

Reason 1
Reason 2
Reason 3
Reason 4

Теперь в таблицу АВАРИЙ мы вставляем некоторые несчастные случаи и причины из предыдущей таблицы, как показано ниже

 - ACCIDENTS -

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

Все I хотите получить количество аварий GROUP BY по всем 4 причинам, даже если причина не существует в таблице ACCIDENTS. В этом случае я хочу получить Count = 0, как показано ниже:

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

Безуспешно Я уже пробовал разные типы таблиц JOIN, но я не получаю результатов Причина 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, тогда я правильно получу все ПРИЧИНЫ, кроме «Где год в авариях» таблица обязательна.

1 Ответ

1 голос
/ 04 августа 2020

Вы хотите 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;
...