MySQL

MySQL의 조건문 case와 if문 사용하기

HooSL 2021. 12. 16. 13:04
INSERT INTO students (first_name) VALUES 
('Caleb'), ('Samantha'), ('Raj'), ('Carlos'), ('Lisa');

INSERT INTO papers (student_id, title, grade ) VALUES
(1, 'My First Book Report', 60),
(1, 'My Second Book Report', 75),
(2, 'Russian Lit Through The Ages', 94),
(2, 'De Montaigne and The Art of The Essay', 98),
(4, 'Borges and Magical Realism', 89);

먼저 데이터를 입력해줍니다.

students테이블은 id(int), first_name(varchar(45)) 이고

papers테이블은 id(int), title(varchar(100)), grade(int), student_id(int)

foreign keys로 students의 id와 papers의 student_id를 연결했습니다.

 

먼저 case 입니다.

case는 case가 나온 뒤 when, then, else, end가 따라옵니다.

 

시험봐서 80점 이상인 학생은 PASSING

시험을 안보거나 80점보다 점수가 낮은 학생은 FAILING 을 주려고 합니다.

select s.first_name,ifnull(avg(p.grade),0) as average,
case
	when avg(p.grade) >= 80 then 'PASSING' -- papers의 grade가 80과 같거나 크다면 PASSING
    else 'FAILING' -- 아니라면 FAILING
end as passing_status -- case문 종료 그리고 컬럼이름은 passing_status로 하겠다
from students s -- students = s
left join papers p -- papers = p
	on s.id = p.student_id
group by s.id
order by average desc;

이렇게 case, when, then, else, end를 통해 조건문을 이용했습니다.

 

if문은 조금더 간결합니다.

select s.first_name,ifnull(avg(p.grade),0) as average,
if (avg(p.grade) >= 80, 'PASSING','FAILING') as passing_status 
-- 만약 papers의 grade가 80과 같거나 크다면 PASSING 아니면 FAILING 컬럼명은 passing_status
from students s
left join papers p
	on s.id = p.student_id
group by s.id
order by average desc;

if문을 이용해도 같은 결과가 나옵니다.