IT/ORACLE

[ORACLE] GROUP BY, HAVING 정리 한 컬림 기준으로 합계, 평균등 구하기

나콘 2023. 7. 13. 11:16

[ORACLE] GROUP BY, HAVING 정리 한 컬림 기준으로 합계, 평균등 구하기 

 

[GROUP BY]

GROUP BY 절을 사용하여 그룹별 건수나 합계를 얻을 수 있다.

GROUP BY 는  SELECT에 COUNT, SUM, AVG, MAX, MIN 등 집계함수 사용 

GROUP BY 에 들어가는 칼럼명은 SELECT 절에도 있어야한다

 

 

HAVING

그룹별 집계된 결과 중 원하는 조건의 결과만 필터링하기 위해서는 HAVING 절을 사용하여 필터 조건을 사용한다 

HAVING 절과 WHERE 절의 다른 점은  "WHERE" 절은 개별 행에 대한 조건을 지정하는 반면 

HAVING 절은 집계 함수를 사용하여 조건절을 작성하거나 GROUP BY 컬럼만 조건절에 사용할 수 있다.

HAVING 절에도  COUNT, SUM, AVG, MAX, MIN 등 집계함수를 사용하여 조건을 부여할 수 있다

 

 


 

 

 

ex > ORDER 테이블이 있다고 가정하고 칼럼명은 

ORDERNO, CUSTOMER_NM, ORDERDATE, ORDER_AMOUNT

주문번호 , 고객이름 , 주문일 , 주문금액 

 

'고객이름'을 기준으로 주문을 그룹화하고 각 고객별 총 주문금액을 계산하려고 한다면?

SELECT CUSTOMER_NM, SUM(ORDER_AMOUNT)
FROM ORDER 
GROUP BY CUSTOMER_NM

[풀이]

이 쿼리는 "ORDER" 테이블을 "CUSTOMER_NM" 열을 기준으로 그룹화하고,

각 고객의 주문 금액을 합산하여 "SUM(ORDER_AMOUNT)" 열로 결과를 반환한다.

이를 통해 각 고객별로 얼마나 많은 주문을 했는지와 총 주문 금액을 파악할 수 있다.

GROUP BY를 사용하면 다양한 집계 함수와 함께 데이터를 그룹화하고 통계 정보를 얻을 수 있다

 

 


 

ex>HAVING 절 사용

 "ORDER " 테이블에서 CUSTOMER_NMORDER_AMOUNT이 1000달러를 초과하는 그룹만 sql 추출 한다고 한다면?

 

SELECT CUSTOMER_NM, SUM(ORDER_AMOUNT) AS TOTAL_AMOUNT
FROM ORDER 
GROUP BY CUSTOMER_NM
HAVING SUM(ORDER_AMOUNT) > 1000;

 

[풀이]

위의 쿼리는 "ORDER " 테이블을 "CUSTOMER_NM" 열을 기준으로 그룹화하고, 각 고객의 주문 금액을 합산한다

그런 다음, TOTAL_AMOUNT이 1000달러를 초과하는 그룹만 선택하여 결과를 반환합니다.
"HAVING" 절을 사용하면 그룹화된 결과에 대한 조건을 지정하여 원하는 그룹을 필터링할 수 있다.

이를 통해 특정 조건을 충족하는 그룹만을 선택하여 데이터를 집계하거나 분석할 수 있다 


반응형