[프로그래머스 SQL 고득점 Kit] SELECT - 12세 이하인 여자 환자 목록 출력하기

bee·2023년 6월 24일

SQL

목록 보기
3/4
post-thumbnail

🔎 문제

다음은 종합병원에 등록된 환자정보를 담은 PATIENT 테이블입니다. PATIENT 테이블은 다음과 같으며 PT_NO, PT_NAME, GEND_CD, AGE, TLNO는 각각 환자번호, 환자이름, 성별코드, 나이, 전화번호를 의미합니다.

PATIENT 테이블에서 12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요. 이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.

예시

PATIENT 테이블이 다음과 같을 때

출력






풀이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;


풀이2. 조건문 IF를 활용한 방법

SELECT PT_NAME, PT_NO, GEND_CD, AGE, IF(ISNULL(TLNO), 'NONE', TLNO) AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME ASC;


풀이3. 조건문 CASE ~ WHEN ~ THEN을 활용한 방법

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;


풀이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;





✅ 정리

데이터가 없는 경우 원하는 출력 값을 설정하는 방법

1. IFNULL() 함수

1) 조회된 데이터가 NULL인 경우

SELECT IFNULL(컬럼명, 대체할 값) AS 별칭 
FROM 테이블명

⏩ 결과

  • 컬럼의 값이 NULL이라면 '대체할 값'을 출력한다.
  • 컬럼의 값이 NULL이 아니라면 해당 컬럼의 값을 출력한다.

2) 조회된 데이터가 아예 존재하지 않는 경우(NULL이 아니라 빈칸일 때)
max() 집계함수는 그룹내 모든 값들 중 가장 큰 값을 리턴하는데, 데이터가 아예 존재하지 않는 경우 가장 큰 값은 NULL이며, 그 결과 NULL을 '대체할 값'이 출력된다.

SELECT IFNULL(MAX(컬럼명), 대체할 값) AS 별칭
FROM 테이블명


2. 조건문 IF

원래 조건문 IFIF(조건, 참일때 값, 거짓일때 값) 과 같은 구조를 사용한다. 그렇다면, IF문을 활용해서 데이터가 없을 경우(NULL일 경우) 대체값을 출력할 수 있도록 어떻게 설정할 수 있을까?

SELECT IF(ISNULL(컬럼명), NULL일 경우 대체값, 컬럼명) AS 별칭
FROM 테이블명


3. 조건문 `CASE ~ WHEN ~ THEN'

  • 기본 구조
CASE
	WHEN 조건식1 THEN 출력값1
    WHEN 조건식2 THEN 출력값2
    ...
    ELSE 위의 모든 조건에 만족하지 않을 경우의 출력값
END
  • 활용 예시
SELECT
	CASE
    	WHEN 컬럼명 IS NULL THEN '대체할 값'
        ELSE 컬럼명
    END AS 별칭
FROM 테이블명


4. COALESCE 함수

COALESCE() 함수는 주어진 인수에서 NULL이 아닌 첫번째 값을 반환한다.
IFNULL() 함수와 역할은 비슷하지만 차이가 있다면,

  • IFNULL(val, '대체할 값')는 인수가 2개 밖에 없으므로 하나가 NULL이면 대체값을 출력한다. (순서 무관)
  • COALESCE(val1, val2, val3, ...)는 여러개의 인수가 가능하며, 처음으로 NULL이 아닌 값을 출력한다.

  • 기본구조
SELECT COALESCE(컬럼명1, 컬럼명2, 컬럼명3, ...) AS 별칭
FROM 테이블명
  • 활용 예시
SELECT COALESCE(컬럼명, 대체할 값) AS 별칭
FROM 테이블명






🔗 References

profile
벌집처럼 밀도있게 차곡차곡 쌓아나가는중

0개의 댓글