나정이의 공부/IT

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

나정_ 2020. 9. 28. 13:25
728x90
반응형

오늘은 "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 

 

 




728x90
반응형