Post

06. SQL(If, Case, Group by)

06. SQL(If, Case, Group by)

[toc]

분기문과 집계문

이번 학습에서는 SQL에서 조건 분기 처리를 위한 IF, CASE, 그리고 데이터를 그룹화하여 집계하는 GROUP BY 문법을 실습하였다.


1. IF, CASE

✅ 테이블 생성 및 데이터 입력

CREATE table class.exam ( id int auto_increment primary key, name varchar(100), math int, english int ); INSERT INTO class.exam VALUES (null, 'Mike', 100, 100), (null, 'John', 96, 84), (null, 'Cole', 83, 66), (null, 'Jordan', 100, 100), (null, 'Curry', 76, 93), (null, 'Lebron', 58, 89);

결과

idnamemathenglish
1Mike100100
2John9684
3Cole8366
4Jordan100100
5Curry7693
6Lebron5889

✅ IF 및 CASE 문법 활용

SELECT name, math, IF(math >= 80, 'good', 'try') AS Feedback, english, CASE WHEN english >= 90 THEN '수' WHEN english >= 80 THEN '우' WHEN english >= 70 THEN '미' WHEN english >= 60 THEN '양' ELSE '가' END AS english FROM class.exam;
  • IF: 조건이 하나일 때 간단히 사용 가능
  • CASE: 여러 조건을 순차적으로 검사할 수 있음
  • END는 반드시 붙여야 함
  • 큰 범위부터 좁은 범위 순서로 작성

결과

namemathFeedbackenglishenglish
Mike100good100수
John96good84우
Cole83good66양
Jordan100good100수
Curry76try93수
Lebron58try89우

2. IFNULL

INSERT INTO class.exam VALUES (null, 'Kim', null, null); SELECT name, math, IFNULL(math, 0) AS in_math FROM class.exam;
  • NULL과 0은 다르며, 연산 시 NULL이 포함되면 전체가 NULL로 처리됨
  • IFNULL(value, replacement)는 값이 NULL이면 지정된 대체값을 출력

결과

namemathin_math
Mike100100
John9696
Cole8383
Jordan100100
Curry7676
Lebron5858
KimNULL0
SELECT 100 + NULL; -- 결과: NULL

3. GROUP BY

✅ 기본 Group By 예시

SELECT STATE, COUNT(*) AS cnt FROM class.c_customer GROUP BY STATE;
  • 각 주별로 몇 명이 있는지를 집계

✅ 집계함수 없이 그룹화 시 오류

SELECT BIGCATEGORY, COUNT(*) AS cnt, PRICE FROM class.c_product GROUP BY BIGCATEGORY;
  • PRICE는 집계함수를 사용하지 않으면 오류 발생

✅ 집계함수 적용 예시

SELECT BIGCATEGORY, SUBCAREGORY, COUNT(*) AS cnt, SUM(PRICE) AS sum, MAX(PRICE) AS max_, MIN(PRICE) AS min_ FROM class.c_product GROUP BY BIGCATEGORY, SUBCAREGORY;
  • GROUP BY 절로 묶는 컬럼 외에는 반드시 집계함수로 처리해야 함

Summary

  • IF: 조건이 하나일 때 사용
  • CASE: 조건이 여러 개일 때 사용, 반드시 END로 마무리
  • IFNULL: NULL 값을 특정 값으로 대체
  • GROUP BY: 행을 그룹화할 때 사용, 집계함수와 함께 사용해야 함
    • GROUP BY 컬럼 외에는 반드시 집계함수로 묶을 것

End