컴퓨터 공부/Database

[Database] Groupby에 대해서 알아보자

나정_ 2012. 12. 22. 02:39

오늘은 "Groupby" 에 대해서 설명해보자~



1.GROUP BY 정의 


GROUP BY 의 정의는 특정 컬럼의 값을 각 값별로 묶어서 결과를 출력하는 것으로 논리적으로 FROM절에 있는 테이블을 GROUPBY절에 명세된 열의 값에 따라 그룹으로 분할한다. 


이해하기 쉽도록 예제를 들어보면. 

 


카테고리에 5개의 종류가 있다. 

이때 내가 product테이블에 들어있는 상품들 중 category별로 가장 높은 가격인 상품을 보고 싶을 경우 

특정 컬럽의 값을 ( p_catagory ) MAX라는 집계함수를 통해 각 값별 (p_price) 로 묶어서 결과를 출력한다.   


= SELECT MAX(p_price) AS c_cgry FROM tb_product GROUP BY p_catagory 


위 쿼리에 대한 결과값은 아래와 같다.  




이렇게 group by를 사용하면 집계함수를 통하여 간단하게 원하는 값을 추출 할 수 있다.

2. GROUP BY 집계함수 

그렇다면 집계함수의 종류는 어떤 것들이 있을까? 

 함수

 기능

 MIN

최솟값 

 MAX

최댓값 

 COUNT 

투플이나 값의 갯수 

 SUM

합 

 AVG 

평균 


예제를 들어보자 . 


질의 2.1) 상품 테이블에서 Category별로 상품코드 갯수를 구하라 

= SELECT COUNT(p_code) AS count_ctry FROM tb_product GROUP BY p_catagory 


질의 2.2) 상품 테이블에 Category별로 총 가격의 합을 구하여라 

= SELECT SUM(p_price) AS count_ctry FROM tb_product GROUP BY p_catagory  


이런 방식으로 최솟값을, 최댓값을, 평균등을 구할 떄 적절한 집계함수를 선택하여 group by를 이용해 결과값을 추출하면 된다. 


3. HAVING 절 


 그룹에 대한 조건은 WHERE절에 쓸 수 없고 HAVING을 사용해야한다. 

 HAVING절에 쓰인 Attribute는 집계함수나 GROUP BY절에 반드시 포함되어야 한다. 


예제를 들어보자 


질의 3.1) 상품 테이블에 각 Catagory에 대한 평균 가격이17000원이 넘는 상품을 출력해라 

= SELECT p_catagory , AVG(p_price) AS avr_ctry FROM tb_product GROUP BY p_catagory HAVING avr_ctry >= 17000 




4.