무료 동영상 강의 https://youtu.be/FZc89GMblds

GROUP BY


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

Untitled

아래는 상품(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에 정의된 컬럼의 값이 같은 데이터끼리 모여 그룹이 만들어진다.