<SQL> MAX 함수 이해하기 - [Programmers] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

2025. 10. 8. 15:02·STUDY

들어가며

https://school.programmers.co.kr/learn/courses/30/lessons/157340

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

해당 문제를 푸는데 새롭게 알게 된 것이 있어 그 내용을 정리해보고자 합니다.


SELECT CAR_ID, CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
                ELSE '대여 가능' END AS 'AVAILBILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY CAR_ID DESC;
CAR_ID AVAILIBILITY
1 대여중
  대여 가능
  대여 가능
  대여 가능
2 대여 가능
  대여 가능
  대여 가능
  대여 가능

해당 쿼리문을 통해 AVAILBILITY 열을 만드는데 성공했지만 GROUP BY 했을 때, '대여중' 행이 하나라도 있다면 '대여중'으로 표시되도록 해야하는 과정이 필요했습니다.

CAR_ID AVAILIBILITY
1 대여중
2 대여 가능

GROUP BY시 AVAILIBILITY를 위 표와 같이 바꾸는 방법을 모색해보았습니다.

 

SUM, EXTRACT, IN 등 다양한 방법이 있었지만 MAX 함수를 사용한다면 효율적으로 쿼리문을 짤 수 있었습니다.

SELECT CAR_ID, MAX(CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
                ELSE '대여 가능' END) AS 'AVAILBILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;

해당 쿼리문의 핵심은 문자열에도 '대소(정렬) 순서가 존재하여 MAX 함수가 그 순서를 기준으로 가장 큰 값을 고른다는 점입니다.

 

왜 MAX()가 '대여중'을 고르는가?

문자열의 크기 비교는 문자 정렬 규칙을 따릅니다.

 

일반적으로 한국어에서는 '대여중' VS '대여 가능'을 비교 시, 같은 문자인 '대여'를 제외하고 같은 자리에 있는 '중' VS ' '(공백)을 비교합니다.

문자 정렬 규칙 상, 공백 < 글자 이므로 '대여중'이 더 큰 문자열로 간주됩니다.

 

  • MAX(['대여 가능', '대여중', '대여 가능']) -> '대여중'
  • MAX(['대여 가능', '대여 가능', '대여 가능']) -> '대여 가능'

그래서 해당 예시처럼 그룹 안에 '대여중'이 한 번 이라도 있으면 MAX 함수가 가장 큰 '대여중' 문자 값을 선택하게 됩니다!

'STUDY' 카테고리의 다른 글

<SQL> ORDER BY 이해하기 - [Programmers] 노선별 평균 역 사이 거리 조회하기  (0) 2025.10.12
<SQL> IN vs EXISTS - [Programmers] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기  (0) 2025.10.09
티스토리 글 검색 포털에 노출시키기  (0) 2025.09.25
<Tableau> 커스텀 도형 사용하기  (0) 2025.09.24
티스토리 블로그에 GA4, GTM 연결하기!  (0) 2025.09.15
'STUDY' 카테고리의 다른 글
  • <SQL> ORDER BY 이해하기 - [Programmers] 노선별 평균 역 사이 거리 조회하기
  • <SQL> IN vs EXISTS - [Programmers] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
  • 티스토리 글 검색 포털에 노출시키기
  • <Tableau> 커스텀 도형 사용하기
승화(承和)
승화(承和)
데이터를 통해 문제의 본질을 파악하고, 실행 가능한 전략으로 연결하는 취준생입니다.
  • 승화(承和)
    일상을 담다
    승화(承和)
  • TOTAL
    TODAY
    YESTERDAY
  • NOTICE

    • 데이터 수집 중입니다.
  • MENU

    • HOME
    • PROJECT
    • JOB
    • STUDY
    • DAILY
  • BEST

  • TAG

    마케팅 플랜
    포트폴리오
    프로그래머스
    쿼리테스트
    아잉단
    SQL
    MySQL
    html
    자기소개서 완성 챌린지
    렛츠커리어
  • POSTS

  • COMMENTS

  • hELLO· Designed By정상우.v4.10.4
승화(承和)
<SQL> MAX 함수 이해하기 - [Programmers] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
상단으로

@Since 2025

궁금한 점이 있으시다면 언제든지 편하게 연락 주세요.

Instagram Notion Github Tableau Mail

티스토리툴바