inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Giải bài tập 101 về SQL trung và cao cấp cùng phân tích dữ liệu thực tế

Giải bài tập thực hành phân tích dữ liệu8

연습문제 37번 관련

202

작성자 없음

0

37번 문제 관련 질문이 있습니다.

저는 LEFT JOIN 에서 TIMESTAMPDIFF 말고 BETWEEN '2006-01-15' AND '2006-02-14' 을 활용했는데요, 두 개의 답이 다르게 나와서 어떤 것이 정확한 방법인지 헷갈려서 문의드립니다.

제가 문제를 잘못 이해한 것일까요?

sql mysql dbms/rdbms

Câu trả lời 2

0

funcoding

안녕하세요. 답변 도우미입니다.

연습문제 37번에서 두 가지 접근 방식에 대해 결과가 다르게 나오는 이유는 TIMESTAMPDIFFBETWEEN을 사용하는 방식의 차이점에 있습니다. 두 방법이 모두 논리적으로 타당할 수 있지만, 문제에서 원하는 조건을 더 정확하게 반영하는 방법은 BETWEEN을 사용하는 방식입니다. 그 이유는 다음과 같습니다.

### 1. TIMESTAMPDIFF 방식

```sql

LEFT JOIN rental r ON c.customer_id = r.customer_id

AND TIMESTAMPDIFF(DAY, r.rental_date, '2006-02-14') <= 30

```

이 방식은 r.rental_date와 기준 날짜인 2006-02-14 사이의 날짜 차이를 30일 이내로 제한하는 방식입니다. 즉, 2006-02-14 기준으로 과거 30일 이내에 대여된 기록을 찾아내는 방식이 됩니다. 이 방법은 날짜의 차이를 기준으로 처리하기 때문에 30일이라는 기간을 계산할 때 정확하게 30일을 넘지 않는 대여 기록을 찾아냅니다.

### 2. BETWEEN 방식

```sql

LEFT JOIN rental r ON c.customer_id = r.customer_id

AND r.rental_date BETWEEN '2006-01-15' AND '2006-02-14'

```

이 방식은 날짜 범위를 직접 명시하는 방식입니다. 즉, 대여 날짜(`r.rental_date`)가 2006-01-15부터 2006-02-14까지의 기간에 속하는지 여부를 확인합니다. 문제에서 말하는 "이전 30일"이 정확히 이 범위에 해당하므로, 문제 의도를 더 명확하게 반영한 방법입니다.

### 차이점 분석:

- `TIMESTAMPDIFF` 방식은 "30일 이내"라는 조건을 사용하기 때문에, 기준 날짜(`2006-02-14`)로부터 정확히 30일을 계산합니다. 하지만, 이 방식은 정확한 날짜 범위(`2006-01-15`부터 2006-02-14)를 반영하지 못할 수 있고, 달력 날짜 계산이 아닌, 날짜 차이를 기반으로 하기 때문에 문제가 될 수 있습니다.

- `BETWEEN` 방식은 문제에서 요구하는 2006-01-15부터 2006-02-14까지라는 정확한 날짜 범위를 지정합니다. 따라서 문제에서 요구한 "이전 30일"이라는 조건을 직접적으로 반영하고 있기 때문에, 더 정확한 방식입니다.

### 결론:

둘다 큰 차이는 아니지만, `BETWEEN` 방식이 더 정확한 방법이라고 볼 수도 있습니다. 문제에서 명시한 날짜 범위가 "2006-01-15일부터 2006-02-14일까지"이므로, 이 범위 내에서 영화를 대여하지 않은 고객을 찾는 것이 올바른 해석입니다.

감사합니다.

잔재미코딩 드림

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 둥절둥절님.

연습문제 37번에 대해 문의주신 점에 대해 답변드리겠습니다.

두 가지 방법 모두 올바른 SQL 구문이지만, 사용된 조건과 상황에 따라 결과가 다를 수 있습니다. TIMESTAMPDIFF와 BETWEEN 연산자는 각각 특정 상황에서 더 적합할 수 있습니다.

  1. TIMESTAMPDIFF:

    • 장점: 특정 기간(예: 일, 월, 년 등)을 비교할 때 유용합니다.
    • 용례: 블로그 포스트 도입까지 TIMESTAMPDIFF를 활용한 예제에 대해 자세히 설명합니다.
  2. BETWEEN:

    • 장점: 특정 날짜 범위 내 데이터를 필터할 때 직관적입니다.
    • 용례: 배포된 자료나 수업 자료에서 BETWEEN으로 해결한 사례를 다룹니다.

기본적으로, 문제의 요구 사항에 따라 적절한 방법을 선택해야 합니다.

관련 답변 URL

INNER JOIN과 LEFT JOIN의 차이와 사용해야 하는 상황

추가 설명

위 링크에서는 INNER JOIN과 LEFT JOIN에 대한 상세한 설명과 사용 사례를 다루고 있습니다. JOIN 연산의 이해를 돕기 위해 꼭 참고하시길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)

0

14

1

실습 데이터(PostgreSQL 백업 파일) 관련하여 문의드립니다. (Hive 환경 실습)

0

10

1

sakila 실전 17번 문제

0

13

1

수강 완료한 강의 수료증 어떻게 받나요?

0

14

1

복합인덱스 설계 질문

0

33

1

app logs 데이터로 쿼리 연습

0

20

2

ArticleReadService 관련 질문

0

26

1

마스터패스...

0

36

1

kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.

1

62

1

[과제] 연습문제 쿼리 작성했습니다!

0

27

2

SubStack 신청 완료했습니다!

0

22

2

domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다

1

45

1

실습소 페이지

0

37

3

노드

0

34

1

where 컬럼에 함수를 적용하는건 좋지 못하다고 들었습니다.

0

97

1

중고급 SQL과 실전 데이터 분석 101 문제 풀이, 13강 EXTRACT

0

110

1

28번 문제 답에대해서 질문드립니다.

0

124

1

중급 연습문제 25번

0

178

1

mysql 워크 벤치 커뮤니티 설치 중 에러

0

173

1

skill

0

235

3

sakila데이터베이스 다운했는데 값이 전부 null

0

201

1

연습문제 4번 관련

1

178

2

연습문제 28번 관련

0

194

3

강의 내 연습문제 유형 관련

0

229

2