[SELECT] 3월에 태어난 여성 회원 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131120
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
다음은 식당 리뷰 사이트의 회원 정보를 담은 MEMBER_PROFILE 테이블입니다. MEMBER_PROFILE 테이블은 다음과 같으며 MEMBER_ID, MEMBER_NAME, TLNO, GENDER, DATE_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를 기준으로 오름차순 정렬했습니다.
코드 실행 시 결과가 동일하더라도 오류가 발생한다면 조건을 다시금 확인해보시면 어려움 없이 풀 수 있는 문제였습니다.