실습문제 (11) - 조건식

골머리·2021년 11월 30일
0
post-thumbnail

책에 있는 2개의 실습문제와 프로그래머스 SQL 코딩테스트의 1문제로 조건식을 실습해보자..!

실습 11-1.

Searched Case 표현식으로 동일한 결과를 얻을 수 있도록, Simple Case 표현식을 사용하는 다음 쿼리를 다시 작성해라. 최대한 WHEN절을 적게 사용해라.

SELECT name,
  CASE name
  	WHEN 'English' THEN 'latin1'
      	WHEN 'English' THEN 'latin1'
        WHEN 'Italian' THEN 'latin1'
        WHEN 'French' THEN 'latin1'
        WHEN 'German' THEN 'latin1'
        WHEN 'Japanese' THEN 'uft8'
        WHEN 'Mandarin' THEN 'uft8'
  	ELSE 'Unknown'
  END 
FROM language;
  • 제시된 쿼리는 Simple case 표현식이다. 이걸 Searched Case 표현식으로 바꿔야 한다.
  • IN을 사용하는게 핵심이었다.

풀이

SELECT name,
    CASE
        WHEN name IN ('English', 'Italian', 'French', 'German')
            THEN 'latin1'
        WHEN name IN ('Japanese', 'Mandarin')
            THEN 'uft8'
        ELSE 'Unknown'
    END 종류
FROM language;

실습 11-2.

5개의 열(각 등급별로 하나씩)이 있는 하나의 행을 결과셋에 표시하도록 다음 쿼리를 다시 작성해라. 이때 5개의 열 이름을 G, PG, PG_13, R, NC_17로 지정해라.

SELECT rating, count(*)
FROM film
GROUP BY rating ;
+--------+----------+
| rating | count(*) |
+--------+----------+
| PG     |      194 |
| G      |      178 |
| NC-17  |      210 |
| PG-13  |      223 |
| R      |      195 |
+--------+----------+
5 rows in set (0.00 sec)
  • 각 등급에 포함되어 있는 문자열이 있는지를 1(true=1)로 두고, 이걸 SUM 해주는게 핵심이다.

풀이

SELECT
    SUM(CASE
            WHEN rating = 'G' THEN 1
            ELSE 0
        END) G,
    SUM(CASE
            WHEN rating = 'PG' THEN 1
            ELSE 0
        END) PG,
    SUM(CASE
            WHEN rating = 'PG_13' THEN 1
            ELSE 0
        END) PG_13,
    SUM(CASE
            WHEN rating = 'R' THEN 1
            ELSE 0
        END) R,
    SUM(CASE
            WHEN rating = 'NC_17' THEN 1
            ELSE 0
        END) NC_17
FROM film ;


표의 행과 열이 바뀌었다.

프로그래머스 문제 : NULL 처리하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.

  • IFNULL을 사용할 수도 있지만 CASESELECT절에 삽입해 사용해봤다.

풀이

SELECT 
    animal_type,
    CASE 
        WHEN name IS NULL THEN 'No name'
        ELSE name
    END name,
    sex_upon_intake
FROM animal_ins 
ORDER BY animal_id ;

결과

정답! 😎 이름이 NULL인 개는 No name으로 표시된 걸 볼 수 있다.

profile
PO로 성장하기 위해 노력 중 👩🏾‍💻

0개의 댓글