문제설명
다음은 식당 리뷰 사이트의 회원 정보를 담은 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문제에서 사용할 수 있을 것이다 !
'DataScience > SQL' 카테고리의 다른 글
[프로그래머스] 카테고리 별 도서 판매량 집계하기 - SQL (7) | 2024.11.04 |
---|---|
[PostgreSQL] SQL에서 Join 연산 개념 및 문법 정리 (INNER, RIGHT, LEFT, FULL, CROSS, SELF Join) (1) | 2024.10.22 |
[PostgreSQL] ALTER TABLE 문법 총정리 - 컬럼 추가, 이름 변경, 삭제 등 (0) | 2024.10.18 |
pymysql 오류 valueerror: unsupported format character (0) | 2024.09.27 |
프로그래머스 SQL SELECT 가장 큰 물고기 10마리 구하기 (0) | 2024.09.20 |