개발/데이터베이스

9장(데이터 그룹핑)

LoafingCat 2023. 5. 1. 15:57

 

 

  연산 테이블에 있는 모든 데이터 또는 WHERE 조건에 일치하는 특정 데이터만을 대상으로 하여 수행할 있다.

 

그런데 만약 원하는 것이 판매처의 제품 수를 구하는 것이라면? 또는 하나의 제품만을 파는 판매처나 10 이상을 파는 판매처가 개인지 확인하고 싶다면 어떻게 해야 할까. 그룹핑이 필요하다. 그룹핑은 데이터를 논리적으로 나눠주기 때문에 그룹에 대한 집계 연산을 있다.

 

그룹 생성하기

 

그룹은 SELECT 구문에서 GROUP BY절을 사용해서 생성 가능

 

 

GROUP BY 사용하면 그룹핑 되어 자동으로 그룹에 대해 계산하기 때문에, 그룹을 따로 명시할 필요가 없다. GROUP BY절은 DBMS에게 먼저 데이터를 그룹핑하게 그룹에 대한 계산을 하라고 지시한다.

 

 

그룹 필터링

 

WHERE 행을 필터링하고, HAVING 그룹을 필터링한다는 점에서 차이가 있다. 문법은 동일하지만 키워드만 다르다.

 

 

 

아까의 구문과 비슷하지만 마지막 줄에 HAVING절이 추가가 됐다. COUNT(*) >= 2 2 이상을 주문한 그룹만 가져온다.

WHERE절의 특정한 행의 값이 아니라, 그룹핑된 집계 값으로 필터링하기 때문에 WHERE 사용 불가

 

가격이 4달러 이상인 제품을 이상 가진 판매처를 구하는 예제

 

 

WHERE절이 prod_price 4달러 이상인 행을 가져온다. 그리고 vend_id 그룹핑 해서 4달러 이상인 제품이 2 이상인 곳을 필터링 하는 것이다.

WHERE 절이 없다면 많은 행이 검색이 것이다.

 

 

이렇게 말이다. GROUP BY절이 있을 때만 HAVING을 사용하고, 단위를 필터링 때는 WHERE을 사용하도록 하자

 

그룹핑과 정렬

 

 

GROUP BY와 ORDER BY가 같은 결과를 가져온다 할지라도, 둘은 매우 다르다는 것을 이해하는 것이 중요하다.

 

ORDER BY를 잊지 말자. GROUP BY절을 사용할 때마다 ORDER BY절을 명시해야 한다. 그렇게 해야 데이터가 제대로 정렬 되었다고 확신할 있다.

 

이상의 제품을 주문한 경우, 주문 번호와 주문 수량을 가져오는 예제

 

 

주문 수량으로 정렬하려면 ORDER BY절만 덧붙이면 된다.

 

 

깔끔하게 필터링 되었다.

 

SELECT 순서

 

SELECT : 가져올 컬럼이나 수식

FROM : 데이터를 가져올 테이블

WHERE : 레벨 필터링

GROUP BY : 그룹 지정

HAVING : 그룹 레벨 필터링

ORDER BY : 정렬 순서