무료 동영상 강의 https://youtu.be/FZc89GMblds
GROUP BY는 데이터를 그룹화하기 위해 사용한다. 그룹화란 같은 값을 가진 데이터를 모으는 것을 뜻한다. 데이터를 그룹화하면 같은 값을 가진 데이터끼리 모여 하나의 그룹이 만들어진다. 만들어진 그룹은 DB 내부적으로만 가지고 있으며, 그룹화된 데이터를 출력하게 되면 그룹별로 한 건의 레코드만 출력을 할 수 있다.

아래는 상품(Item) 테이블에서 상품사이즈코드(ItemSizeCd)가 REG(Regular)이면서 출시일자(LaunchDt)가 2019년 1월 1일인 데이터를 조회하는 SQL이다.
-- [SQL-5-1-1] Item 데이터 조회
SELECT T1.ItemId ,T1.ItemNm ,T1.ItemCat ,T1.HotColdCd
FROM startdb.Item T1
WHERE T1.ItemSizeCd = 'REG'
AND T1.LaunchDt = STR_TO_DATE('20190101','%Y%m%d')
ORDER BY T1.ItemCat;
-- 결과
ItemId ItemNm ItemCat HotColdCd
------ ------------------- ------- ---------
HCHR Hot Chocolate(R) BEV HOT
LEMR Lemonade(R) BEV COLD
BGLR Bagel(R) BKR HOT
BMFR Blueberry Muffin(R) BKR COLD
CMFR Chocolate Muffin(R) BKR COLD
AMR Americano(R) COF HOT
CLR Cafe Latte(R) COF HOT
IAMR Iced Americano(R) COF COLD
ICLR Iced Cafe Latte(R) COF COLD
위 SQL의 결과 중에 상품카테고리(ItemCat) 데이터를 살펴보자. BEV(음료) 상품이 두 건이 이고, BKR(베이커리) 상품이 세 건, COF(커피)인 데이터가 네 건이 있다. 이러한 결과 데이터를 상품카테고리(ItemCat)별로 그룹을 만들어 보려고 한다. 다시 말해, COF인 데이터를 모아서 하나의 그룹을 만들고, BKR인 데이터로 하나의 그룹, BEV인 데이터로 하나의 그룹을 만드는 것이다. 이를 위해 GROUP BY를 사용할 수 있다. 아래와 같이 위의 SQL을 변경하자.
-- [SQL-5-1-2] [SQL-5-1-1]을 ItemCat로 GROUP BY 처리
SELECT T1.ItemCat -- >
FROM startdb.Item T1
WHERE T1.ItemSizeCd = 'REG'
AND T1.LaunchDt = STR_TO_DATE('20190101','%Y%m%d')
GROUP BY T1.ItemCat -- >
ORDER BY T1.ItemCat;
ItemCat
-------
BEV
BKR
COF
위와 같이 GROUP BY를 사용하면, GROUP BY에 정의된 컬럼의 값이 같은 데이터끼리 모여 그룹이 만들어진다.