일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Chat GPT
- SQLD
- 전처리
- pandas
- 데이터 분석
- GA4
- 기초통계
- 히트맵
- SQL
- lambda
- 크롤링
- Python
- 프롬프트 엔지니어링
- 군집화
- 시각화
- da
- cross join
- 서브쿼리
- 데이터분석
- 태블로
- data analyst
- 최종 프로젝트
- 프로젝트
- 머신러닝
- 클러스터링
- jd
- If
- 기초프로젝트
- 팀프로젝트
- streamlit
- Today
- Total
세조목
SQL정리(max함수)(24.01.05)(업데이트 예정) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/157340
프로그래머스 59번 예제를 복습하던 중
이해가 되지 않는 부분이 있었다.
MAX(IF(START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16', '대여중', '대여 가능')) AVAILABILITY
이 부분인데 문제의 요구사항대로 2022년 10월 16일에 대여 중인 CAR_ID를 선택하기위해
IF(START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16', '대여중', '대여 가능')이라는 조건을 걸었다.
이렇게 했을때 하나의 CAR_ID에 여러 개의 대여 기록이 있기때문에 DATE들이 여러개가 조회되는데
우리는 가장 최근의 대여 기록을 알고자 하는것이므로 가장 큰 날짜(=가장 최근의 날짜)를 구하기위해
MAX함수를 씌워주었다.
그런데 이렇게 했을때의 문제는 MAX를 씌웠음에도 불구하고 DATE가 최근의 DATE가 조회되지 않는다는 점이었다.
아래 이미지는 MAX함수를 씌우기 전에 조회한 결과값인데 CAR_ID가 29인 속성값들 중에서 2022년 11월 29일이 가장 최근의 대여 기록인 것을 확인할 수 있다.
그런데 MAX함수를 씌웠을때의 결과값을 보면 2022년 8월 5일이 가장 최근의 날짜로 나온 것을 확인할 수 있다.
'문제가 잘못됐나' 싶었는데
문제가 잘못된건 아니고,
IF의 결과값에 MAX를 씌웠다는 것을 노치고 있던 것이었다.
무슨 말이냐하면
IF(START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16', '대여중', '대여 가능')
IF문의 결과값은 '대여중'이거나 '대여 가능'으로 나올 것이다.
'대여중'과 '대여 가능'에 MAX를 거는건데
'대여중'과 '대여 가능'은 TRUE or FALSE로 1 or 0이다.
1과 0 중에서 가장 큰 값은 1이기때문에
'대여중'이 하나라도 섞여있는 CAR_ID의 경우 AVAILABILITY 컬럼에 '대여 중'인 레코드가 조회될 것이다.
그런데... 그럼에도 불구하고 아직도 의문점이 남는다...
'대여중'이 TRUE값으로 1이니까 MAX씌웠을때 이 레코드가 조회돼야하는데
최종 결과값을 보면 AVAILABILITY에는 '대여중'이라고 출려돼있으나
START_DATE와 END_DATE를 보면 여전히 가장 오래된 대여 일자가 출력된다.
이 부분에 대해서는 왜 저렇게 출력이 되는지 조금 더 고민을 해보고 포스팅을 업데이트하도록하겠다.
일단 오늘 새롭게 학습한건
IF문에 MAX를 씌웠을때는 IF의 결과값이 숫자가 아닌 TRUE or FALSE라면 1과 0을 가지고서 MAX값을 구한다는 점이다.
'데이터 분석 공부 > SQL' 카테고리의 다른 글
SQL 정리(여러 column의 값 한번에 바꾸기)(24.01.12) (0) | 2024.01.12 |
---|---|
SQL 정리(MySql DBeaver DB 연결)(24.01.11) (0) | 2024.01.11 |
SQL 정리(개인과제 복습)(24.01.03) (1) | 2024.01.03 |
SQL 정리(With절, 컬럼 전체의 합, View, Explain)(24.01.02) (0) | 2024.01.02 |
SQL 정리(STR_TO_DATE, SQL 실행 순서, 데이터 삭제)(23.12.29) (1) | 2023.12.30 |