오늘은 "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
'나정이의 공부 > IT' 카테고리의 다른 글
해시(Hash) 인덱스 정리 (0) | 2021.06.24 |
---|---|
MultipartFile 이미지를 binary로 변환, 출력하기! (0) | 2021.06.23 |
mod.jk를 이용하여 Apache2 + tomcat 다중 연동 배워보기 ! (0) | 2021.04.08 |
[클라우드] EC2를 이용한 서버 구축 실습 (0) | 2021.04.08 |
[Database] mysql explain 이해 (0) | 2020.09.28 |