일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- PYTHON
- Algorithm
- sql
- SQL공부
- 머신러닝
- sql오답노트
- 코세라강의
- WHERE
- Machine Learning
- Andrew NG
- 안드류응
- 경제공부
- coursera
- sorted
- DATE_FORMAT
- 코세라머신러닝강의
- programmers
- 프로그래머스SQL
- orderby
- 코세라
- 인프런sql강의
- POP
- groupby
- 알고리즘
- mysql
- 머신러닝강의
- 파이썬
- 프로그래머스
- map
- 코세라머신러닝
Archives
- Today
- Total
미래를 예측하는 데이터분석가
[MYSQL] 프로그래머스 3월 생일 여성 회원 조회하기 본문
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 | 회원 생년월일 |
문제 조건:
- 성별이 여성(W)인 회원만 조회합니다.
- 생일이 3월인 회원만 조회합니다.
- 전화번호(TLNO)가 NULL이 아닌 회원만 출력합니다.
- 결과는 회원 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;
풀이 과정
- 필요한 컬럼만 선택:
MEMBER_ID
,MEMBER_NAME
,GENDER
,DATE_OF_BIRTH
를 조회했습니다.DATE_FORMAT
함수로 날짜를YYYY-MM-DD
형식으로 지정했습니다. - 조건 설정:
GENDER = 'W'
: 성별이 여성인 경우만 필터링.EXTRACT(MONTH FROM DATE_OF_BIRTH) = '03'
: 생년월일에서 3월 데이터를 추출.- 참고:
SUBSTR(DATE_OF_BIRTH, 6, 2) = '03'
도 사용할 수 있습니다.
- 참고:
TLNO IS NOT NULL
: 전화번호가 NULL이 아닌 데이터만 필터링.
- 결과 정렬:
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 |
오답노트
내가 실수한 부분
- 생일 필터링 방식:
초기에는 날짜의 월(month)을 추출하기 위해SUBSTR
만 사용하려 했습니다.
하지만EXTRACT(MONTH FROM DATE_OF_BIRTH)
가 더 직관적이고 범용적인 방식임을 확인했습니다. - 전화번호 NULL 조건 누락 가능성:
문제를 꼼꼼히 읽지 않아, 초기 시도에서는TLNO IS NOT NULL
조건을 누락할 뻔했습니다. 이는 조건을 빠르게 지나쳤기 때문입니다.
정리
- 문제 해결 팁:
- 날짜 데이터 필터링은 SQL 함수(
EXTRACT
,DATE_FORMAT
)를 활용하면 더욱 명확하고 안전함 - NULL 조건 처리는 반드시 명시적으로 포함할 필요 있음
- 정렬 기준이 명확하지 않으면 문제 요구사항을 다시 확인 필요
- 날짜 데이터 필터링은 SQL 함수(
- 배운 점:
- EXTRACT 함수 외에도 SUBSTR 또는 MONTH 날짜 가공에 적합한 함수 사용할 수 있음
- NULL 조건을 상시 생각하고 쿼리문을 짜야함을 배움
'시스템 & 데이터베이스 > SQL' 카테고리의 다른 글
[SQL] 프로그래머스 자동차 대여 기록에서 대여중/ 대여 가능 여부 구분하기 (0) | 2025.01.10 |
---|---|
[MYSQL] 프로그래머스 가격대 별 상품 개수 구하기 (1) | 2024.12.19 |
[MYSQL] 노선별 평균 역 사이 거리 조회하기 (0) | 2024.12.18 |
[인프런] BigQuery (SQL) 입문 #2-(1) 데이터 탐색 - 조건, 추출, 요약 (3) | 2024.12.05 |
[인프런] BigQuery (SQL) 입문 #2 데이터 탐색 - 조건, 추출, 요약 (1) | 2024.12.04 |