미래를 예측하는 데이터분석가

[MYSQL] 프로그래머스 3월 생일 여성 회원 조회하기 본문

시스템 & 데이터베이스/SQL

[MYSQL] 프로그래머스 3월 생일 여성 회원 조회하기

잘하다연 2024. 12. 19. 19:42

SQL 문제 풀이: 3월 생일 여성 회원 조회하기

문제 설명

다음은 MEMBER_PROFILE 테이블 구조입니다. 회원 정보를 바탕으로 문제 조건에 맞는 데이터를 조회해야 합니다.

Column name Type Nullable Description
MEMBER_ID VARCHAR(100) FALSE 회원 ID
MEMBER_NAME VARCHAR(50) FALSE 회원 이름
TLNO VARCHAR(50) TRUE 회원 연락처
GENDER VARCHAR(1) TRUE 회원 성별
DATE_OF_BIRTH DATE TRUE 회원 생년월일

문제 조건:

  1. 성별이 여성(W)인 회원만 조회합니다.
  2. 생일이 3월인 회원만 조회합니다.
  3. 전화번호(TLNO)가 NULL이 아닌 회원만 출력합니다.
  4. 결과는 회원 ID 기준 오름차순 정렬합니다.

문제 풀이

내가 작성한 SQL 쿼리는 다음과 같습니다:

SELECT MEMBER_ID, 
       MEMBER_NAME, 
       GENDER, 
       DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE GENDER = 'W' 
      AND EXTRACT(MONTH FROM DATE_OF_BIRTH) = '03'
      AND TLNO IS NOT NULL
ORDER BY MEMBER_ID ASC;

풀이 과정

  1. 필요한 컬럼만 선택:
    MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH를 조회했습니다.
    DATE_FORMAT 함수로 날짜를 YYYY-MM-DD 형식으로 지정했습니다.
  2. 조건 설정:
    • GENDER = 'W': 성별이 여성인 경우만 필터링.
    • EXTRACT(MONTH FROM DATE_OF_BIRTH) = '03': 생년월일에서 3월 데이터를 추출.
      • 참고: SUBSTR(DATE_OF_BIRTH, 6, 2) = '03'도 사용할 수 있습니다.
    • TLNO IS NOT NULL: 전화번호가 NULL이 아닌 데이터만 필터링.
  3. 결과 정렬:
    ORDER BY MEMBER_ID ASC로 회원 ID 기준 오름차순 정렬했습니다.

예시 데이터 및 결과

MEMBER_PROFILE 테이블 데이터:

MEMBER_ID MEMBER_NAME TLNO GENDER DATE_OF_BIRTH
jiho92@naver.com 이지호 01076432111 W 1992-02-12
jiyoon22@hotmail.com 김지윤 01032324117 W 1992-02-22
jihoon93@hanmail.net 김지훈 01023258688 M 1993-02-23
seoyeons@naver.com 박서연 01076482209 W 1993-03-16
yoonsy94@gmail.com 윤서연 NULL W 1994-03-19

실행 결과:

MEMBER_ID MEMBER_NAME GENDER DATE_OF_BIRTH
seoyeons@naver.com 박서연 W 1993-03-16

 


오답노트

내가 실수한 부분

  1. 생일 필터링 방식:
    초기에는 날짜의 월(month)을 추출하기 위해 SUBSTR만 사용하려 했습니다.
    하지만 EXTRACT(MONTH FROM DATE_OF_BIRTH)가 더 직관적이고 범용적인 방식임을 확인했습니다.
  2. 전화번호 NULL 조건 누락 가능성:
    문제를 꼼꼼히 읽지 않아, 초기 시도에서는 TLNO IS NOT NULL 조건을 누락할 뻔했습니다. 이는 조건을 빠르게 지나쳤기 때문입니다.

정리

  1. 문제 해결 팁:
    • 날짜 데이터 필터링은 SQL 함수(EXTRACT, DATE_FORMAT)를 활용하면 더욱 명확하고 안전함
    • NULL 조건 처리는 반드시 명시적으로 포함할 필요 있음
    • 정렬 기준이 명확하지 않으면 문제 요구사항을 다시 확인 필요
  2. 배운 점:
    • EXTRACT 함수 외에도 SUBSTR 또는 MONTH 날짜 가공에 적합한 함수 사용할 수 있음
    • NULL 조건을 상시 생각하고 쿼리문을 짜야함을 배움