상세 컨텐츠

본문 제목

SQL - GROUP BY 문 (+ AGG, HAVING)

Computer Science/데이터베이스

by Dohangang 2024. 4. 5. 18:18

본문

 

 

 

 

 

 

 

첫 프로젝트를 했을 때는 GROUP BY가 무엇인지 알지 못한 채로 남들이 써놓은 것을 보고 어떻게든 원하는 데이터가 나오게 하기 위해 사용했었다. 그리고 두 번째 프로젝트에서는 DISTINCT가 적용되지 못한 채 데이터가 출력되어 이를 해결하고자 GROUP BY를 사용했었다. 

GROUP BY를 그냥 그룹 지어주는 구문이겠거니 생각하고 있었는데 이번 학습을 통해 어느 정도 이해가 생긴 것 같다

 

GROUP BY 문은 예를 들어

(1) 특정 카테고리의 합계, 평균을 내거나  

(2) 데이터의 그룹화로 인한 패턴식별  

(3) 요약을 통한 특성 파악  

(4) 매출의 그룹화나 분석이나 보고를 위한 생성 

등을 목적으로 사용할 수 있다.

 

코딩을 할 때 이유와 생각을 배제하고 활용하는 것을 지양해야 할 것이다

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

Most Common Aggregate Function
→ (집계 함수는 SELECT 절이나 HAVING 절에서만 호출되며, 다른 열과 함께 호출되지 않는다)

  • AVG() : returns average value
  • COUNT() : returns number of values
  • MAX() : returuns maximum vlaue
  • MIN() : returns minimum value
  • SUM() : returns the sum of all values
  • - ROUND(AVG(), 2) : 두 개의 변수, 하나는 반올림하려는 값 두 번째는 몇 자리까지 반올림할 것인지
  • - DATE(payment_date) : 날짜별로 나타내는 함수, 뒤의 시간 초 단위를 고려하지 않으려는 의도

 

 

GROUP BY (특정 카테고리별로 열을 그룹화하여 집계)

  • SELECT category_col, AGG(data_col) FROM table GROUP BY category_col
    → GROUP BY는 FROM문 바로 뒤나 WHERE문 바로 뒤에 위치
  • GROUP BY문을 사용하고 특정 열만을 선택하는 경우에는 GROUP BY문에 반드시 그 열을 포함시켜야 한다 → 그 열에 어떤 집계 함수를 호출하는 경우에만 예외
  • GROUP BY를 사용할 때, WHERE문에는 집계 함수를 입력해서는 안된다, HAVING문의 역할...
  • GROUP BY를 사용하면 distinct랑 비슷한 결과물을 얻을 수 있다. 중복 없애기
SELECT c.customer_id, c.customer_name, SUM(od.unit_price * od.quantity) AS total_price
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
JOIN order_details od ON o.order_id = od.order_id
GROUP BY c.customer_id, c.customer_name;

 

 

HAVING

  • HAVING 은 집계된 결과에 대한 필터링을 제공하여 원하는 집계된 결과만을 반환할 수 있도록 도와준다
  • SELECT company, SUM(sales) FROM finance_table GROUP BY company HAVING SUM(sales) > 1000
  • AGG()는 FROM, WHERE, GROUP BY가 수행된 후에야 실행된다, 즉 AGG()는 WHERE 문으로 필터링할 수 없다
  • HAVING을 WHERE문처럼 생각할 수 있지만, GROUP BY를 통해 집계된 것에만 적용한다

 

 

 

 

 

 

관련글 더보기