04. 보고 싶은 데이터 요약하기 / 집계함수, GROUP BY

기초/SQL|2020. 12. 29. 12:09

대량의 값들을 볼 때는 각각의 데이터를 보기보다는 통계를 뽑기도 한다. = 요약 통계

집계 함수 : 여러 행 또는 테이블 전체 행으로부터 하나의 결과값을 반환하는 함수! 실습 링크

 

>SELECT COUNT(*)

FROM Products

>> Products 테이블에 있는 전체* 데이터 행의 수를 세어준다.

 

ID Name Visits
1 A 1
2 A 2
3 B 3
4 C 5
5 Null Null

 

>SELECT COUNT(*) FROM sample; → 5 전체 데이터 행의 수

>SELECT COUNT(Name) FROM sample; → 4 Null값 제외

>SELECT COUNT(DISTINCT Name) FROM sample; → 3 Null값 제외+중복값 제외

 

SUM : 숫자 컬럼을 가진 데이터의 총 합계를 구해준다.

MAX : 숫자 컬럼을 가진 데이터의 최대값을 구해준다.

MIN : 숫자 컬럼을 가진 데이터의 최소값을 구해준다.

>SELECT ___(Price)

FROM Products

>> Products 테이블의 Price 데이터의 ___

 

AVG : 숫자 컬럼을 가진 데이터의 평균값을 구해준다.

*단, Null 값을 주의할 것. 위 표를 기준으로

>SELECT AVG(Visits) FROM sample; → (1+2+3+5)/4 = 2.75 *Null값을 없는 데이터로 치고 싶을 때

>SELECT SUM(Visits)/COUNT(*) FROM sample; → (1+2+3+5)/5 = 2.2 *Null값을 0으로 치고 싶을 때

 

GROUP BY : 특정 카테고리별로 나눠서 집계함수를 사용할 수 있도록 해준다.

ex. 판매 기록에서 봤을 때 지역별 판매한 금액, 연령대별 고객 수 등등..

 

>SELECT SupplierID, AVG(Price)

FROM Products

GROUP BY SupplierID

>> Products 테이블에서 공급자별 평균 판매금액을 구한다.

 

*여러 기준으로 보고 싶을 때는 콤마로 묶는다.

>SELECT SupplierID

             , CategoryID

             , AVG(Price) *코드 가독성을 위한 띄어쓰기 팁~

FROM Products

GROUP BY SupplierID, CategoryID

-- ORDER BY AVG(Price) *오더바이는 그룹바이 뒤에

>> Products 테이블에서 공급자별 평균 판매금액, 품목별 평균 판매금액을 구한다.

 

HAVING : '특정 카테고리별로 나뉜 결과물'에 조건을 달아 보고 싶을 때. =/= WHERE

 

>SELECT SupplierID

             , CategoryID

             , AVG(Price) 

FROM Products

GROUP BY SupplierID

WHERE Price >= 100

>> SQL내부 실행 순서에 따라 WHERE절이 GROUP BY보다 앞서 실행되기 때문에, 코드가 실행되지 않는다.

 

>SELECT SupplierID

             , CategoryID

             , AVG(Price) 

FROM Products

GROUP BY SupplierID, CategoryID

HAVING AVG(Price)>=100  *HAVING은 반드시 GROUP BY와 함께!

>> GROUP BY 다음에 HAVING이 실행되기 때문에, 문제 없이 실행된다.

    공급자별 평균 판매 금액, 품목별 평균 판매 금액을 구하되 평균 판매 금액이 100 이상인 항목만 보여준다.

 

AS : 데이터값의 이름을 지어준다.

>SELECT SupplierID

             , CategoryID

             , AVG(Price) AS avg_price

FROM Products

GROUP BY SupplierID, CategoryID

HAVING avg_price >=100

 

 

[집계함수 연습문제]

연습문제 링크1

연습문제 링크2

연습문제 링크3 *WHERE은 FROM 뒤에!!!

연습문제 링크4

rounded down to the nearest integer = 반올림하여 소수점 없이

연습문제 링크5

연습문제 링크6

 

[GROUP BY 연습문제]

연습문제 링크

댓글()