SQL 고득점 Kit/SELECT

[SELECT] 3월에 태어난 여성 회원 목록 출력하기

욱스917 2024. 9. 8. 18:00

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명
다음은 식당 리뷰 사이트의 회원 정보를 담은 MEMBER_PROFILE 테이블입니다. MEMBER_PROFILE 테이블은 다음과 같으며 MEMBER_IDMEMBER_NAMETLNOGENDERDATE_OF_BIRTH는 회원ID, 회원 이름, 회원 연락처, 성별, 생년월일을 의미합니다.

Column name Type Nullable
MEMBER_ID VARCHAR(100) FALSE
MEMBER_NAME VARCHAR(50) FALSE
TLNO VARCHAR(50) TRUE
GENDER VARCHAR(1) TRUE
DATE_OF_BIRTH DATE TRUE

문제
MEMBER_PROFILE 테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원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 박서연 박서연 W 1993-03-16
yoonsy94@gmail.com 윤서연 NULL W 1994-03-19

 

SQL을 실행하면 다음과 같이 출력되어야 합니다.

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

주의사항
DATE_OF_BIRTH의 데이트 포맷이 예시와 동일해야 정답처리 됩니다.


회원 정보를 담은 MEMBER_PROFILE 테이블에서 특정 조건을 만족하는 회원들의 정보를 추출하는 문제입니다.

 

문제 자체는 어렵지 않은데, 하나씩 빠트리기가 쉬운 문제기도 합니다.

정답 출력 자체는 동일한데 틀린 풀이라고 한다면 조건을 빠트린 경우일 가능성이 높습니다.

 

조건을 정리해보겠습니다.

1. 여성 회원이어야 합니다. (성별란이 W여야 합니다.)

2. 생일이 3월이어야 합니다. (연도에 관계없이 달만 3이면 됩니다.)

3. 전화번호가 있어야 합니다. (NULL 값을 가져서는 안됩니다.)

4. 회원ID를 기준으로 정렬해야 합니다.

 

이 4가지 규칙을 바탕으로 정답 코드를 작성해보겠습니다.

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

 

태어난 달이 3월이어야 하기 때문에 MONTH 함수를 사용해 계산했습니다.

MONTH 함수는 DATE 형식의 데이터에서 달을 계산해주는 함수입니다. 이외에도 YEAR, DAY, WEEKDAY, DAYOFWEEK 같은 함수도 자주 사용됩니다.

 

TLNO, 즉 전화번호가 NULL이면 안 되기 때문에 TLNO IS NOT NULL로 값이 있는 경우들만 필터링을 했습니다.

 

여성 회원을 조회해야 하므로 GENDER = 'W'를 사용해 여성만 구분해주었습니다.

 

마지막으로 ORDER BY를 사용해 회원ID를 기준으로 오름차순 정렬했습니다.

 

코드 실행 시 결과가 동일하더라도 오류가 발생한다면 조건을 다시금 확인해보시면 어려움 없이 풀 수 있는 문제였습니다.