컴퓨터 공부/Database

[Database] MYSQL groupby rollup

나정_ 2012. 12. 30. 20:25

오늘은 group by를 이용하여 도출된 값을 좀 더 응용해보고자 한다. 


1. rollup이란 


group by 절의 그룹 조건에 따라 전체 행을 그룹화하고  그 데이터의 총합계를 구하는 rollup이라는 것이 있다. 



2. 예제


예제를 살펴보자. 


예제 1) 





SELECT p_category, SUM(p_price) FROM tb_product GROUP BY p_category 


[그림 1]


tb_product라는 상품테이블을 카테고리별로 그룹화하였다. 

또한 SUM이라는 집계함수를 이용하여 카테고리 별로 판매 가격의 합계를 구하였다. 


이제 rollup을 이용하여 이 테이블의 총합계를 구해보자 . 


SELECT p_category, SUM(p_price) FROM tb_product GROUP BY p_category  WITH ROLLUP


뒤에 WITH ROLLUP을 붙여주면 해당 테이블의 총합계를 구할 수 있다. ( 이것은 MYSQL 기준이다. ) 



[그림 2]





예제 2) 


위에 간단한 예제로 rollup에 대해 설명했으니 이번엔 조금 어려운 예제로 접근해보자 . 


상품테이블과 구매테이블을 조인하여 상품 판매한 금액과 판매 갯수를 구하려고 한다.  


SELECT pro.p_category, 

       buy.p_code AS code ,

       SUM(buy.buy_total) AS SUM, 

       COUNT(buy.p_code) AS COUNT 

  FROM tb_product pro 

     JOIN asso_buy buy 

         ON buy.p_code = pro.p_code 

   GROUP BY pro.p_category, 

       buy.p_code WITH ROLLUP 

 


[그림 3]







예제 3) 

예제 2와 유사한 예제이다. 


SELECT bid.tb_auction_auc_code1, 

  auc.auc_model,

       COUNT(bid.tb_auction_auc_code1) AS cct, 

       AVG(bid.max_bid_price) AS average

  FROM tb_auction auc , asso_bid bid 

         WHERE  auc.auc_code=bid.tb_auction_auc_code1 

   GROUP BY bid.tb_auction_auc_code1 WITH ROLLUP 



[그림 4]