source

SQL null 값이 결과에 표시되지 않습니다.

manycodes 2023. 8. 29. 20:45
반응형

SQL null 값이 결과에 표시되지 않습니다.

SQL 쿼리의 null 값을 가져오는 데 문제가 있습니다.다음은 문제에 대한 설명입니다.

주별 총소득.돈은 손님들이 떠날 때 모아집니다.2016년 11월과 12월의 각 목요일에 대해 이전 금요일부터 그날까지 수집된 총 금액을 표시합니다.

여기 목요일부터 금요일까지 매주 소득을 반납해야 하는 코드가 있는데, 소득이 있는 주는 정확하게 표시되고 소득이 없는 주는 표시되지 않기 때문에 제가 받는 답변은 부분적으로 맞습니다.저는 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

다음은 2016년 11월과 2016년 12월의 목요일을 얻는 한 가지 방법입니다.

    SELECT i AS thursday, i - INTERVAL 6 DAY AS friday
    FROM calendar
    WHERE i >= '2016-11-01' AND i - INTERVAL 6 DAY <= '2016-12-31' AND DAYOFWEEK(i) = 5

데이터에 왼쪽으로 참여하십시오. 체크아웃 날짜(booking_date + nights)로 참여해야 합니다.

SELECT
    thursday, SUM(
        COALESCE(booking.nights * rate.amount, 0) +
        COALESCE(extras.total, 0)
    ) AS weekly_income
FROM (
    SELECT i AS thursday, i - INTERVAL 6 DAY AS friday
    FROM calendar
    WHERE i >= '2016-11-01' AND i - INTERVAL 6 DAY <= '2016-12-31' AND DAYOFWEEK(i) = 5
) AS thursdays
LEFT JOIN (
    booking
    INNER JOIN rate ON booking.occupants = rate.occupancy AND booking.room_type_requested = rate.room_type
    LEFT JOIN (
        SELECT booking_id, SUM(amount) AS total
        FROM extra
        GROUP BY booking_id
    ) AS extras ON booking.booking_id = extras.booking_id
) ON booking.booking_date + INTERVAL booking.nights DAY BETWEEN friday AND thursday
GROUP BY thursday

언급URL : https://stackoverflow.com/questions/53374549/sql-null-values-not-being-shown-in-results

반응형