[프로그래머스] MySQL 3월에 태어난 여성 회원 목록 출력하기

728x90

프로그래머스 문제풀이

 

문제설명


 

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

 

테이블 스키마 정보

 

MEMBER_PROFILE 테이블에서 생일이 3월인 여성 회원ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.

 

출력예시


출력은 위와 같아야 한다.

 

 

문제해설


본 문제는 읽어보면 굉장히 쉽다.

그저, WHERE절 하나로 해결할 수 있기 때문이다.

 

문제의 조건을 읽어보면

1. 생일이 3월달

2. 성별이 여성인 회원

3. 회원ID를 기준으로 오름차순 정렬

이다.

 

문제에 맞게 해결해주면 된다.

 

DATE 컬럼을 WHERE절에서 비교할 때

년도나 월, 일을 비교하기 위해선 특정 함수를 사용하면 된다.

YEAR, MONTH, DAY함수로 DATE 타입 컬럼을 감싸주면 된다.

 

하지만, 주의사항에는 아래와 같은 내용이 적혀있다.

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

 

 

대수롭지 않게 여기고 문제를 그저 해결하고자 SQL문을 적어서 코드를 실행해보면

아래와 같은 결과를 얻을 수 있을 것이다.

 

SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE TLNO is not null and MONTH(DATE_OF_BIRTH) = 3 and GENDER = 'W'
ORDER BY MEMBER_ID

 

결과는 아래와 같이 나온다.

잘못된 결과

 

DATE 컬럼의 뒤에 시:분:초 가 붙어버린 것,

하지만 주의사항에서 언급되었던 내용과 같이 예시 결과와 동일해야 해결할 수 있다.

 

제출을 해보면, 결과는 아마 정해져 있을 것이다.

 

여기서 우리는 DATE 타입의 컬럼을 다루는 방법을 익혀야 한다.

지금 문제가 틀리는 이유는 DATE 컬럼의 포맷이 결과값과 다르기 때문이다.

 

이를 위해선 DATE_FORMAT 함수를 이용하면 된다.

 

결과적으로 문제를 해결할 수 있는 쿼리문은 아래와 같다.

 

SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') as DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE TLNO is not null and DATE_OF_BIRTH is not null and MONTH(DATE_OF_BIRTH) = 3 and GENDER = 'W'
ORDER BY MEMBER_ID

 

결과

 

이러한 방법으로 DATE 타입의 컬럼의 포맷을 수정해줄 수 있다.

 

여기서 년도의 경우, 대문자가 작성되었는데 이 때 소문자로 입력하면 92로 나오게 될 것이다.

즉, 대문자는 4자리, 소문자는 마지막 두자리로 출력한다.

 

위 사항을 잘 기억해두면 언젠가 SQL문제에서 사용할 수 있을 것이다 !

728x90