KEEP GOING

[MySQL] IF/ELSE 조건문 처리와 형 변환 (CASE WHEN, CONVERT, CAST) 본문

code review/sql

[MySQL] IF/ELSE 조건문 처리와 형 변환 (CASE WHEN, CONVERT, CAST)

jmHan 2021. 11. 8. 16:48
반응형
CASE
    WHEN 조건
    THEN '반환값'
    WHEN 조건
    THEN '반환값'
    ELSE 'WHEN 조건에 해당 안되는 경우 반환 값'
END

- WHEN THEN은 한쌍으로 존재한다.

- ELSE가 존재하지 않는 경우 반환값이 없어 NULL을 반환하므로 주의

 

 

 

[조건문 처리]

1. 팀 별 평균키 구하기

player 테이블에서 팀별 평균키가 180이상인 경우에는 '180 이상'으로 그렇지 않은 경우는 '180 이하'라는 값을 가지는 평균키라는 컬럼명과 team_id를 출력하시오.

SELECT team_id,
  CASE WHEN avg(height) >= 180 THEN '180 이상' ELSE '180 이하'
  END AS 평균키 
FROM kleague.player GROUP BY team_id;

 

결과)

 

2. cart_id와 결제액 조회하기

카트별 결제액을 조회하는데 카트에 담은 금액이 5만원을 넘지 못하는 경우, 배송비 3천원이 붙는다.

SELECT CART_ID, 
CASE WHEN SUM(COST)<50000 THEN SUM(COST)+3000 ELSE SUM(COST)
END AS 결제액
FROM MART GROUP BY CART_ID;

 

3. 나이에 따라 신분 분류하기 

SELECT *, CASE WHEN AGE BETWEEN 14 AND 16 THEN '중학생'
               WHEN AGE BETWEEN 17 AND 19 THEN '고등학생'
               WHEN AGE >= 20 THEN '성인'
               ELSE '어린이'
          END AS "IDENTITY"
FROM TABLE_NAME;

 

4. 중성화 여부 파악하기

https://programmers.co.kr/learn/courses/30/lessons/59409

# LIKE % 사용
SELECT ANIMAL_ID, NAME, 
  CASE
    WHEN SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O'
    WHEN SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O'
    ELSE 'X'
  END AS '중성화'
FROM ANIMAL_INS ORDER BY ANIMAL_ID;

# SUBSTRING 사용
SELECT ANIMAL_ID, NAME, 
  CASE
    WHEN SUBSTRING(SEX_UPON_INTAKE,1,1)='N' THEN 'O'
    WHEN SUBSTRING(SEX_UPON_INTAKE,1,1)='S' THEN 'O'
    ELSE 'X'
  END AS '중성화'
FROM ANIMAL_INS ORDER BY ANIMAL_ID;

* SUBSTRING(문자열, A, B): A부터 B번째까지의 부분 문자열 리턴 

 

[형변환]

팀별 평균키를 평균키라는 컬럼명으로 지정하여 팀 별 평균키와 team_id 조회

 (단 값은 정수형으로 변환하여 출력하시오)

 

1) convert(값, data type)

SELECT team_id,
  CONVERT(AVG(height), signed) AS 평균키 
FROM kleague.player GROUP BY team_id;

 

2) cast(as data type)

SELECT team_id,
  CAST(AVG(height) AS signed) AS 평균키 
FROM kleague.player GROUP BY team_id;

 

결과)

반응형
Comments