반응형
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인 것들은 나타나지 않습니다.
다음은 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
반응형
'source' 카테고리의 다른 글
window.print() 마감을 탐지하는 방법 (0) | 2023.08.29 |
---|---|
MYSQL 데이터베이스의 모든 외부 키 삭제 (0) | 2023.08.29 |
MySQL: FULL OUTER JOIN - 열 하나를 병합하려면 어떻게 해야 합니까? (0) | 2023.08.29 |
iOS 자동 레이아웃: 두 개의 동일한 너비의 버튼이 나란히 있습니다. (0) | 2023.08.29 |
Swift에서 Int를 16진수 문자열로 변환하는 방법 (0) | 2023.08.29 |