🍅 Learning/SQL

[SQL/프로그래머스] 12세 이하인 여자 환자 목록 출력하기 (SELECT #4)

대저 2023. 3. 28. 08:30
반응형

문제

12세 이하인 여자환자 목록 출력하기

출처 - 프로그래머스 SQL 고득점 Kit
출처 - 프로그래머스 SQL 고득점 Kit

다음과 같은 결과가 출력되어야 한다.


문제 풀이 과정

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도 써봤다. 


[출처] 프로그래머스 스쿨 - 코딩테스트 연습 - SQL 고득점 Kit

반응형