inflearn logo
강의

Course

Instructor

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

Practical Data Analysis Exercises 8

연습문제 37번 관련

181

작성자 없음

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

5

1

vercel실행 - failed to fetch

0

11

1

드랍 테이블로 지운 ordes에 대해서 질문

0

22

1

문제 풀이 1번 질문

0

28

1

twitterdb 연결이 안돼요

1

27

2

Kafka Cluster 구성도 질문

0

23

1

아주 작은 정오표 전달드립니다.

0

52

2

mysql워크벤치를 실행할때마다 오류가 뜹니다. 해결 방법좀 가르켜주세요.

0

44

1

온톨로지 구축

0

27

1

실제로 작은 기업에서 기획 롤

1

26

1

함수기반 인덱스

0

29

2

날짜 인덱스관련 질문

0

26

1

복합인덱스 확인법

0

23

0

이제 인프런에서 강의 더 안산다. 후져....

0

42

1

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

0

84

1

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

0

92

1

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

0

104

1

중급 연습문제 25번

0

152

1

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

0

140

1

skill

0

216

3

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

0

185

1

연습문제 4번 관련

1

153

2

연습문제 28번 관련

0

166

3

강의 내 연습문제 유형 관련

0

183

2