반응형
문제
12세 이하인 여자환자 목록 출력하기
다음과 같은 결과가 출력되어야 한다.
문제 풀이 과정
1. 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회한다. (SELECT)
2. 나이는 12세 이하여야 한다. (조건 : AGE <= 12)
3. 성별이 여자여야 한다. (조건 : GEND_CD = W)
4. 만약 전화번호가 없다면 NONE으로 출력한다. (IFNULL, IF, CASE ...)
5. 나이를 기준으로 내림차 정렬하되, 나이가 같다면 이름을 기준으로 오름차 정렬 한다. (AGE DESC, NAME ASC)
SQL 코드 1 - IFNULL 활용
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = "W"
ORDER BY AGE DESC, PT_NAME ASC;
SQL 코드 2 - IF 활용
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IF(TLNO IS NULL, 'NONE', TLNO) AS TLNO
FROM PATIENT
WHERE AGE<=12 AND GEND_CD = "W"
ORDER BY AGE DESC, PT_NAME ASC;
SQL 코드 3 - CASE 활용
SELECT PT_NAME, PT_NO, GEND_CD, AGE,
CASE WHEN TLNO IS NULL THEN 'NONE'
ELSE TLNO END AS TLNO
FROM PATIENT
WHERE AGE<=12 AND GEND_CD = "W"
ORDER BY AGE DESC, PT_NAME ASC;
SQL 코드 4 - COALESCE 활용
SELECT PT_NAME, PT_NO, GEND_CD, AGE,
COALESCE (TLNO, 'NONE') AS TLNO
FROM PATIENT
WHERE AGE<=12 AND GEND_CD = "W"
ORDER BY AGE DESC, PT_NAME ASC;
실행결과
회고
NULL값인지 아닌지 판별하는 데에서 쓸 수 있는 방법이 꽤 많았다.
1. IFNULL (A, "~") : 만약 A값이 NULL이라면 ~을 출력한다.
- 가장 먼저 떠올린 방법이며, 가장 쉽다고 생각했던 방법이다.
2. IF (A IS NULL, 'a', 'b') : 만약 A가 NULL이라면 a를 출력하고 아니면 b를 출력한다.
- IF문으로도 충분히 원하는 값을 출력할 수 있을 것 같다.
3. CASE WHEN A IS NULL THEN 'NONE' ELSE A END : 만약 A가 NULL이라면 'NONE'을 출력하고 아니면 A값을 그대로 출력한다.
- IF문으로도 원하는 값을 출력했으니 CASE도 가능할 것 같았다.
4. COALESCE (A, 'NONE') : A가 NULL인 값은 NONE이라고 출력하고 아니라면 A를 출력한다.
- 값이 NULL이냐 아니냐! 를 판단해야 해서 COALESCE도 써봤다.
반응형
'🍅 Learning > SQL' 카테고리의 다른 글
[SQL/프로그래머스] 평균 일일 대여요금 구하기 (SELECT #6) (0) | 2023.03.30 |
---|---|
[SQL/프로그래머스] 흉부외과 또는 일반외과 의사 목록 출력하기 (SELECT #5) (0) | 2023.03.29 |
[SQL/프로그래머스] 모든 레코드 조회하기 (SELECT #3) (0) | 2023.03.27 |
[SQL/프로그래머스] 강원도에 위치한 생산공장 목록 출력 (SELECT #2) (0) | 2023.03.26 |
[SQL/프로그래머스] 3월에 태어난 여성 회원 목록 출력하기 (SELECT #1) (0) | 2023.03.25 |