CODING TEST/MySQL
Lv1 - 12세 이하인 여자 환자 목록 출력하기
iamyuunzo
2025. 7. 16. 17:38
📌 문제 정보
- 문제 이름 : 프로그래머스 - (SELECT) 12세 이하인 여자 환자 목록 출력하기
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/132201
📌 문제 요약
- PATIENT 테이블 : PT_NO(환자번호), PT_NAME(환자이름), GEND_CD(성별코드), AGE(나이), TLNO(전화번호)
- PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성
- 이때 전화번호가 없는 경우, 'NONE'으로 출력, 결과는 나이를 기준으로 내림차순 정렬, 나이 같다면 환자이름을 기준으로 오름차순 정렬
예시)
| PT_NO | PT_NAME | GEND_CD | AGE | TLNO |
| PT22000003 | 브라운 | M | 18 | 01031246641 |
| PT22000004 | 크롱 | M | 7 | NULL |
| PT22000006 | 뽀뽀 | W | 8 | NULL |
| PT22000009 | 한나 | W | 12 | 01032323117 |
| PT22000012 | 뿡뿡이 | M | 5 | NULL |
| PT22000013 | 크리스 | M | 30 | 01059341192 |
| PT22000014 | 토프 | W | 22 | 01039458213 |
| PT22000018 | 안나 | W | 11 | NULL |
| PT22000019 | 바라 | W | 10 | 01079068799 |
| PT22000021 | 릴로 | W | 33 | 01023290767 |
출력)
| PT_NAME | PT_NO | GEND_CD | AGE | TLNO |
| 한나 | PT22000009 | W | 12 | 01032323117 |
| 안나 | PT22000018 | W | 11 | NONE |
| 바라 | PT22000019 | W | 10 | 01079068799 |
| 뽀뽀 | PT22000006 | W | 8 | NONE |
📌 내 풀이 및 코드
SELECT PT_NAME, PT_NO, GEND_CD, AGE, COALESCE(TLNO, 'NONE') AS TLNO
FROM PATIENT
WHERE GEND_CD = 'W'
AND AGE <=12
ORDER BY AGE DESC, PT_NAME ASC;
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** COALESCE 문법 **
- SQL에서 NULL 값을 다른 값으로 대체할 때 사용하는 함수
# COALESCE 문법 : 왼쪽부터 차례대로 값 검사해서 NULL이 아닌 첫 번째 값 반환
COALESCE(VALUE1, VALUE2, VALUE3, ..., VALUE N)
# 예제 1 : 단순 사용
SELECT COALESCE(NULL, NULL, '대체값') AS 결과; # 출력: 대체값
# 예제 2 : 테이블 컬럼에 적용
SELECT COALESCE(TLNO, 'NONE') AS TLNO FROM PATIENT; # TLNO가 NULL이면 NONE출력, 값 있으면 원래대로 출력
- COALESCE vs IFNULL
| 함수 | 특징 | 예시 |
| COALESCE | 다수의 값 중 첫 번째 NOT NULL 반환 | COALESCE(a, b, c) |
| IFNULL | 두 개의 값만 처리 가능 (MySQL 전용) | IFNULL(a, b) → a가 NULL이면 b |