У меня проблемы с получением нулевых значений в SQL-запросе. Это описание проблемы:
Валовой доход за неделю. Деньги собираются с гостей, когда они уходят.
За каждый четверг в ноябре и декабре 2016 года показывайте общую сумму
денег, собранных с прошлой пятницы по этот день включительно.
Вот код, который я написал, который должен возвращать еженедельный доход с четверга до предыдущей пятницы, ответ, который я получаю, является частично правильным, так как недели, у которых есть доход, отображаются правильно, а недели, у которых нет дохода, не отображается Я попытался добавить предложение IFNULL, но это все еще не решает проблему.
SELECT DATE_ADD(MAKEDATE(2016, 7), INTERVAL WEEK(DATE_ADD(calendar.i, INTERVAL booking.nights - 5 DAY), 0) WEEK) AS Thursday, IFNULL(SUM(booking.nights * rate.amount) + SUM(e.amount),0) AS weekly_ncome
FROM booking
RIGHT OUTER
JOIN calendar ON booking.booking_date = calendar.i
JOIN rate ON (booking.occupants = rate.occupancy AND booking.room_type_requested = rate.room_type)
LEFT JOIN (
SELECT booking_id, IFNULL(SUM(amount),0) AS amount
FROM extra
GROUP BY booking_id
) AS e ON (e.booking_id = booking.booking_id)
GROUP BY Thursday;
Для справки: этот вопрос можно найти в разделе SQLzoo Guesthouse, вопрос 15 . Это ожидаемый результат:
+------------+---------------+
| Thursday | weekly_income |
+------------+---------------+
| 2016-11-03 | 0.00 |
| 2016-11-10 | 12608.94 |
| 2016-11-17 | 13552.56 |
| 2016-11-24 | 12929.69 |
| 2016-12-01 | 11685.14 |
| 2016-12-08 | 13093.79 |
| 2016-12-15 | 8975.87 |
| 2016-12-22 | 1395.77 |
| 2016-12-29 | 0.00 |
| 2017-01-05 | 0.00 |
+------------+---------------+
Я получаю то же, что и выше, но те, у которых еженедельный доход равен 0, не отображаются.
![Database diagram](https://i.stack.imgur.com/K9p2Q.png)