Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 프로그래머스
- SQL
- STP
- 티스토리챌린지
- vlan
- Ansible
- Cisco
- BPDU
- LACP
- port aggregation protocol
- 하프오픈
- Packet Tracer
- Network Design
- Red Hat
- centos
- 네트워크
- ansible playbook
- 오블완
- 방화벽
- eigrp
- ospf
- 네이티브 vlan
- freeradius
- gns3
- 네트워크 설계
- rommon mode
- pvst+
- stream 9
- pagp
- junos os
Archives
- Today
- Total
Doctor Pepper
[프로그래머스] 3월에 태어난 여성 회원 목록 출력하기 본문
728x90
1. 문제 설명
다음은 식당 리뷰 사이트의 회원 정보를 담은 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 |
2. 문제
MEMBER_PROFILE 테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.
3. 예시
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 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
MEMBER_ID | MEMBER_NAME | GENDER | DATE_OF_BIRTH |
seoyeons@naver.com | 박서연 | W | 1993-03-16 |
4. 정답
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE GENDER = 'W' AND DATE_FORMAT(DATE_OF_BIRTH, '%m') = '03' AND TLNO IS NOT NULL ORDER BY MEMBER_ID ASC; |
- SQL 작성 단계
- WHERE GENDER = 'W' : 성별이 여성('W')인 회원을 필터링한다.
- DATA_FORMAT(DATE_OF_BIRTH, '%m') = '03' : 생년월일의 월 부분이 '03'인 회월을 필터링한다.
- TLNO IS NOT NULL : 전화번호가 NULL이 아닌 회원만 조회한다.
- ORDER BY MEMBER_ID ASC : 회원 ID를 기준으로 오름차순으로 정렬
5. 설명(DATE_FORMAT)
- DATE_FORMAT
SQL에서 날짜 형식을 원하는 형태로 변환할 때 사용되는 함수이다. 이 함수는 날짜 데이터를 특정 형식으로 출력할 수 있도록 도와준다. 즉, 날짜 또는 시간 값에서 특정 부분(연도, 월, 일, 시간 등)을 추출하거나 표시할 때 사용된다.
DATE_FORMAT(date, format) |
- date : 변환할 날짜 또는 시간 값이다.
- format : 날짜 또는 시간의 출력 형식을 지정하는 문자열이다. 여기서 사용하는 포맷 코드가 날짜 또는 시간의 각 부분을 정의한다.
- 주요 포맷 코드
- %Y : 4자리 연도(ex. 2024)
- %y : 2자리 연도(ex. 24)
- %m : 2자리 월(01~12)
- %d : 2자리 일(01 ~ 31)
- %H : 24시간 형식의 시간(00 ~ 23)
- %i : 2자리 분(00 ~ 59)
- %s : 2자리 초(00 ~ 59)
- %W : 요일명 (ex. Sunday)
- %M : 월명(ex. January)
- 예시
SELECT DATE_FORMAT('2024-10-17', '%Y-%m-%d') AS formatted_date; |
- 결과 : 2024-10-17
SELECT DATE_FORMAT('2024-10-17', '%M %d, %Y') AS formatted_date; |
- 결과 : October 17, 2024
SELECT DATE_FORMAT('2024-10-17 14:30:45', '%H:%i:%s') AS time_only; |
- 결과 : 14:30:45
- 응용 1 : 회원 생일을 'YYYY년 MM월 DD일' 형식으로 표시
SELECT MEMBER_ID, MEMBER_NAME, DATE_FORMAT(DATE_OF_BIRTH, '%Y년 %m월 %d일') AS birthdate FROM MEMBER_PROFILE; |
- 응용 2 : 특정 연도의 생일을 가진 회원 조회
SELECT MEMBER_ID, MEMBER_NAME, DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE DATE_FORMAT(DATE_OF_BIRTH, '%Y') = '1992'; |
- 응용 3 : 생일이 오늘인 회원 조회
SELECT MEMBER_ID, MEMBER_NAME, DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE DATE_FORMAT(DATE_OF_BIRTH, '%m-%d') = DATE_FORMAT(NOW(), '%m-%d'); |
- NOW() 함수는 현재 날짜와 시간을 반환하며, DATE_FORMAT을 이용해 월과 일만 추출하여 비교한다.
- 응용 4 : 나이 계산 후 회원 정보 표시
SELECT MEMBER_ID, MEMBER_NAME, DATE_OF_BIRTH, YEAR(NOW()) - YEAR(DATE_OF_BIRTH) - (DATE_FORMAT(NOW(), '%m%d') < DATE_FORMATE(DATE_OF_BIRTH, '%m%d')) AS age FROM MEMBER_PROFILE; |
- 현재 연도에서 생년월일의 연도를 빼서 나이를 계산한다. 또한, 현재 날짜가 생일을 지났는지 여부를 고려하여 정확한 나이를 계산한다.
- 응용 5 : 생일이 이번 주에 있는 회원 조회
SELECT MEMBER_ID, MEMBER_NAME, DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE WEEKOFYEAR(DATE_OF_BIRTH) = WEEKOFYEAR(NOW()); |
- WEEKYEAR() 함수와 DATE_FORMAT을 활용하여 이번 주에 생일이 있는 회원을 조회한다.
- WEEKYEAR() 함수는 날짜 값이 속한 연도의 몇 번째 주인지를 반환하는 함수이다.
- 응용 6 : 생일이 지난 회원 조회
SELECT MEMBER_ID, MEMBER_NAME, DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE DATE_OF_BIRTH < CURDATE(); |
- CURDATE()는 현재 날짜를 반환하며, DATE_OF_BIRTH와 비교하여 생일이 이미 지난 회원을 찾는다.
728x90
'프로그래밍 > 프로그래머스-SQL' 카테고리의 다른 글
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (2) | 2024.10.17 |
---|---|
[프로그래머스] 서울에 위치한 식당 목록 출력하기 (1) | 2024.10.17 |
[프로그래머스] 과일로 만든 아이스크림 고르기 (2) | 2024.10.16 |
[프로그래머스] 흉부외과 또는 일반외과 의사 목록 출력하기 (6) | 2024.10.16 |
[프로그래머스] 평균 일일 대여 요금 구하기 (2) | 2024.10.16 |