본문 바로가기
SQL/Programmers

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

by 이뮴 2023. 7. 4.
728x90

💻 CASE 먼저 살펴보기

CASE 구문은 <IF>, <SWITCH>의 같다. 

<조건식1>을 충족하면 A, <조건식2>를 충족하면 B, 그렇지 않으면 C를 출력하는 구문이다.

-- (컬럼명) 내에 조건식1을 충족하면 A, 조건식2를 충족하면 B, 모두 충족하지 않으면 C가 출력된다.
select 
	case
    		when (조건식1) then A
        	when (조건식2) then B
        	else C
    end as (컬럼명)

 

CASE 구문은 SELECT뿐만 아니라 WHERE, GROUP BY, HAVING 등에서도 쓰여 분기를 지정할 수 있다. 

-- number 값에 따라 classA/B/F가 나뉨
select ...
from Table A
where 
	case
    		when A.number = 1 then classA
        	when A.number = 2 then classB
        	else classF
    end

 

💻 문제 주소 : https://school.programmers.co.kr/learn/courses/30/lessons/132201

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

💻 문제 설명

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

Column name Type Nullable
PT_NO VARCHAR(10) FALSE
PT_NAME VARCHAR(20) FALSE
GEND_CD VARCHAR(1) FALSE
AGE INTEGER FALSE
TLNO VARCHAR(50) TRUE

 

💻 문제

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

 

💻 코드 및 풀이

select PT_NAME, PT_NO, GEND_CD, AGE,
	-- TLNO가 없으면 'NONE' 출력, 있으면 TLNO 출력
    case 
    	when tlno is null then 'NONE' 
        else tlno
    end TLNO
from patient
where age <= 12 and gend_cd = 'W'
order by age desc, pt_name

 

위 문제 중 CASE와 관련된 조건은 아래와 같다.

1️⃣ 전화번호가 없으면 NONE, 그 외에는 TLNO 출력

 

위 문장을 영어로 그대로 쓰면 어떻게 될까? 'If there's no TLNO, then print 'NONE'. If there is, then print TLNO'를 유추했다면 이제 이를 그대로 쿼리로 쓰면 된다.

  • If there's no TLNO > Case when TLNO is null
  • then print 'NONE' > then 'NONE'
  • If there is > else
  • then print TLNO > else TLNO
  • end TLNO * 이건 컬럼명을 정하기 위해 쓴 것

SQL은 생각보다 우리가 말하는 그대로 옮기면 생각보다 쉽게 쿼리를 짤 수 있다. 위 CASE 외에도 여러 조건이 있긴 하지만 이 부분 외에는 크게 어려운 부분이 없으니 넘기도록 하자.

728x90
반응형