inflearn logo
강의

Khóa học

Chia sẻ kiến thức

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

Giải bài tập phân tích dữ liệu thực tế 8

연습문제 37번 관련

169

작성자 없음

0 câu hỏi đã được viết

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

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

모델 서빙과 관련된 강좌 출시 예정된 바가 있으신지 여쭤봅니다!

0

2

1

트리거 질문

0

2

0

Vercel 실행이 안됩니다

0

2

1

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

0

12

1

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

0

15

1

Substack 1년 제공

1

23

3

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

0

27

2

스프링부트 서버 에러나요

0

17

1

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

0

22

2

간단한 오타 제보입니다.

0

19

1

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

0

35

2

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

0

37

2

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

0

28

2

Sequence 관련 질문

1

32

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

208

3

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

0

176

1

연습문제 4번 관련

1

143

2

연습문제 28번 관련

0

161

3

강의 내 연습문제 유형 관련

0

176

2