개발 블로그
[데이터베이스]집계함수란?/데이터 그룹화 본문
집계 함수란 행들을 집계하는데 행의 개수를 세거나 평균값을 구하거나 총합을 구할 때 사용하는 함수이다.
COUNT: 행의 개수 세기
COUNT(칼럼 또는 *)
만약 GOOD 테이블에서 상품의 개수를 세고 싶다면 아래와 같이 작성하면 된다.
SELECT COUNT(*) AS totalelements FROM GOODS;
SELECT COUNT(*) AS totalelements FROM GOODS WHERE GD_STOCK<10;
상품들 중 재고가 10개 미만인 상품의 개수를 알고싶다면 위의 구문처럼 작성하면 된다.
만약 COUNT(칼럼)이면, 칼럼에 NULL 값이 있는 것은 세지 않는다.
AVG: 숫자형 행들의 평균 계산
AVG(숫자형 값을 가진 칼럼)
만약 상품의 평균 가격을 알고 싶다면 아래와 같이 작성하면 된다.
SELECT AVG(GD_PRICE) AS average_price FROM GOODS;
MAX: 숫자형 칼럼 중 가장 큰 값 계산
MAX(숫자형 값을 가진 칼럼)
만약 가장 비싼 상품의 가격을 구하고 싶다면 아래와 같이 작성하면 된다.
SELECT MAX(GD_PRICE) AS max_price FROM GOODS;
MIN: 숫자형 칼럼 중 가장 작은 값 계산
MIN(숫자형 값을 가진 칼럼)
만약 가장 저렴한 상품의 가격을 구하고 싶다면 아래와 같이 작성하면 된다.
SELECT MIN(GD_PRICE) AS min_price FROM GOODS;
SUM: 숫자형 행들의 총합
SUM(숫자형 값을 가진 칼럼)
만약 총 판매 금액을 구하고 싶다면 아래와 같이 작성하면 된다.
SELECT SUM(GD_PRICE * GD_STOCK) AS sum FROM GOODS;
만약에 AS로 별칭을 지정하지 않으면 함수( )가 칼럼 이름으로 나온다.
응용
SELECT COUNT(*) AS COUNT, SUM(GD_PRICE * GD_STOCK), MAX(GD_PRICE), MIN(GD_PRICE)
FROM GOODS;
위와 같이 질의하면
다음과 같은 결과가 나온다.
데이터 그룹화(GROUP BY)
앞에서는 조건에 맞는 행들을 찾아 집계하는 방법에 대해 배웠고, 이 집계 함수를 그룹 단위로 집계하는 것이 GROUP BY이다.
만약 상품 번호가 1인 상품의 결제액의 총합을 알고 싶다면 아래와 같이 작성하면 된다.
SELECT SUM(OD_PAYMENT_AMOUNT) AS paymentAmount FROM ORDER_LIST WHERE OD_GOODS_ID=1;
하지만 GROUP BY를 사용해 그룹화할 컬럼들을 지정하여 동일한 값을 가진 데이터끼리 그룹화할 수 있다.
SELECT OD_GOODS_ID, SUM(OD_PAYMENT_AMOUNT) AS paymentAmount
FROM ORDER_LIST GROUP BY OD_GOODS_ID;
이것은 OD_GOODS_ID 값이 동일한 행들끼리 그룹화한다는 의미이다. 그리고 그룹별로 집계 함수를 이용해 집계한다.
SELECT OD_GOODS_ID, SUM(OD_QUANTITY) AS quantity FROM ORDER_LIST GROUP BY OD_GOODS_ID;
여러 개의 칼럼을 그룹화할 수도 있다.
SELECT OD_PAYMENT_YEAR, OD_PAYMENT_MONTH, SUM(OD_PAYMENT_AMOUNT) AS paymentAmount
FROM ORDER_LIST
GROUP BY OD_PAYMENT_YEAR, OD_PAYMENT_MONTH;
(년, 월) 그룹과 동일한 값을 가지는 행들을 그룹화하고 그룹별 결제액의 총합을 구한다.
HAVING
WHERE은 조건식이 그룹화 이전에 결과물을 필터링하는 것이라면,
HAVING은 그룹화 이후에 결과물을 필터링하는 것이다.
이때 HAVING의 조건식으로는 그룹화 이후 임시 테이블에 존재하는 칼럼이므로, 그룹화되지 않은 칼럼은 조건식으로 지정할 수 없다.
SELECT OD_PAYMENT_YEAR, OD_PAYMENT_MONTH, SUM(OD_PAYMENT_AMOUNT) AS paymentAmount
FROM ORDER_LIST
GROUP BY OD_PAYMENT_YEAR, OD_PAYMENT_MONTH
HAVING paymentAmount >= 30000;
위의 구문은 같은 연도 같은 월의 주문들의 결제액 총합이 30000원 이상인 연도와 월을 찾는 구문이다.
'전공 공부 > 데이터베이스' 카테고리의 다른 글
[데이터베이스]서브쿼리란?/ 서브쿼리 사용법 (0) | 2022.12.11 |
---|---|
[데이터베이스]JOIN (0) | 2022.12.10 |
[데이터베이스]WHERE 조건절/LIKE (0) | 2022.12.08 |
[데이터베이스]SELECT 구문으로 데이터 검색하기 (0) | 2022.12.08 |
[데이터베이스] 데이터의 삽입, 수정, 삭제 (0) | 2022.12.04 |