inflearn logo
강의

Course

Instructor

Intermediate-Advanced SQL and Practical Data Analysis: 101 Problem Solutions

Practical Data Analysis Exercises 8

연습문제 37번 관련

169

작성자 없음

0 asked

0

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

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

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

sql mysql dbms/rdbms

Answer 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 연산의 이해를 돕기 위해 꼭 참고하시길 바랍니다.

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

패키지 구분에 대해 궁금한게 있습니다

0

7

1

노션 링크도 안 열리고, 알려준 vercel도 실행이 안됩니다.

0

10

1

Substack 1년 제공

1

21

3

특별 학습 자료 프로모션 1년 멤버십 무료 제공 문의드립니다

0

27

2

스프링부트 서버 에러나요

0

17

1

코드를 첨부해야하는 이유가 있나요?

0

20

2

간단한 오타 제보입니다.

0

19

1

큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.

0

34

2

실제 FK제약조건을 설정하지 않는이유

0

35

2

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

28

2

Sequence 관련 질문

1

32

2

Image Only Query

1

29

2

Free Edition 실습 영상은 아직 업데이트전인가요?

0

22

1

라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항

0

36

2

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

0

78

1

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

0

84

1

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

0

98

1

중급 연습문제 25번

0

136

1

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

0

131

1

skill

0

207

3

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

0

176

1

연습문제 4번 관련

1

142

2

연습문제 28번 관련

0

161

3

강의 내 연습문제 유형 관련

0

176

2