1. IF
: IF(조건, 참일 때 값, 거짓일 때 값)
: 조건이 하나일 때
: 주로 SELECT절에서 사용
2. CASE
: CASE
WHEN 조건식1 THEN 결과값1
WHEN 조건식2 THEN 결과값2
ELSE 결과값3
END [AS ALIAS]
: CASE 컬럼이름
WHEN 조건값1 THEN 결과값1
WHEN 조건값2 THEN 결과값2
ELSE 결과값3
END [AS ALIAS]
# 1 150보다 작으면 old, 크거나 같으면 new
SELECT name,
IF(number < 150, 'old', 'new') AS age
FROM mypokemon;
# 2 공격력 방어력 합이 100보다 작으면 weak, 크거나 같으면 strong
SELECT name,
IF(attack + defense < 100, 'weak', 'strong') AS ability
FROM mypokemon;
# 3 타입별 공격력의 평균이 60이상이면 True(1), 아니면 False(0)
SELECT name,
IF(AVG(attack) >= 60, 1, 0) AS is_strong_type
FROM mypokemon
GROUP BY type;
# 4 공격력이 100보다 크고 방어력도 100보다 크면 1, 둘 중 하나라도 100보다 작으면 0
SELECT name,
IF(attack > 100 AND defense > 100, 1, 0) AS ace
FROM mypokemon;
# 5 번호가 100보다 작으면 <100, 200보다 작으면 <200, 500보다 작으면 <500
SELECT name,
CASE
WHEN number < 100 THEN '<100'
WHEN number < 200 THEN '<200'
WHEN number < 500 THEN '<500'
END AS nember_bin
FROM mypokemon;
# 6 number가 150보다 크면 new, 아니면 old / attack이 50보다 크면 strong, 아니면 weak -> 4개로 분류
SELECT name,
CASE
WHEN (number >= 150) AND (attack >= 50) THEN 'new_strong'
WHEN (number >= 150) AND (attack < 50) THEN 'new_weak'
WHEN (number < 150) AND (attack >= 50) THEN 'old_strong'
ELSE 'old_weak'
END AS age_attack
FROM mypokemon;
# 7 타입 별 포켓몬 수가 1개면 solo, 3개 미만이면 minor, 3개 이상이면 major
SELECT name,
CASE
WHEN COUNT(1) = 1 THEN 'solo'
WHEN COUNT(1) < 3 THEN 'minor'
ELSE 'major'
END AS count_by_type
FROM mypokemon
GROUP BY type;
3. 함수 만들기
** MySQL Workbench에서는 함수 생성 쿼리 실행 전에 함수 생성 권한 주는 쿼리 실행해줘야 함!
** 앞 뒤로 DELIMITER//, // DELIMITER ; 꼭 써주기, 끝에 DELIMITER와 ; 사이는 꼭 띄워주기
SET GLOBAL log_bin_trust_function_creators = 1; # 사용자 계정에 function create 권한 부여
함수 생성 문법
DELIMITER// # 함수의 시작 지정
CREATE FUNCTION 함수이름(입력값이름, 데이터타입, ...)
RETURNS 결과값데이터타입
BEGIN
DECLARE 임시값이름 데이터타입
SET 임시값이름 = 입력값이름
쿼리;
RETURN 결과값
END
//
DELIMITER ; # 함수의 끝 지정, 세미콜론이랑 꼭 한 칸 띄워줘야함!!!!!
ex)
DELIMITER //
CREATE FUNCTION isStrong (attack INT, defense INT)
RETURNS VARCHAR(20)
BEGIN
DECLARE a INT;
DECLARE b INT;
DECLARE total VARCHAR(20);
SET a = attack;
SET b = defense;
SELECT
CASE
WHEN a + b > 120 THEN 'very strong'
WHEN a + b > 90 THEN 'strong'
ELSE 'not strong'
END INTO total;
RETURN total;
END
//
DELIMITER ; # 함수의 끝 지정, 세미콜론이랑 꼭 한 칸 띄워줘야함!!!!!
# 함수 확인용 쿼리
SELECT name, isStrong(attack, defense) AS isStrong
FROM mypokemon;
'[패스트캠퍼스] 데이터분석부트캠프 > SQL' 카테고리의 다른 글
[4주차] SQL: SUBQUERY 서브쿼리 (0) | 2023.03.10 |
---|---|
[3주차] SQL: 합집합(UNION, UNION ALL), 교집합(JOIN), 차집합(JOIN) (0) | 2023.03.10 |
[3주차] SQL: JOIN(INNER, OUTER) (0) | 2023.03.09 |
[3주차] SQL: FROM절 서브쿼리 SUBQUERY, LIST IN (0) | 2023.03.08 |
[3주차] SQL: 그룹화(GROUP BY, HAVING) (0) | 2023.03.08 |