상세 컨텐츠

본문 제목

[Oracle DB 입문 11] 집계함수

DataBase

by 코딩순이 2021. 3. 12. 19:48

본문

▶ AVG

AVG(Column) 조회 범위 내 해당 컬럼들의 평균값

- DISTINCT : 중복된 값은 제외
- ALL : Default로써 모든 값을 포함
- Column명 : NULL값은 제외
SELECT AVG(DISTINCT PROD_COST) AS "중복된 값은 제외"
, AVG(ALL PROD_COST) AS "DEFALT 로써 모든 값을 포함"
, AVG(PROD_COST) AS "매입가 평균"
FROM PROD;

-- 상품테이블의 상품분류별 매입가격 평균값
SELECT PROD_LGU
, ROUND(AVG(PROD_COST), 2)
FROM PROD
GROUP BY PROD_LGU;

-- 상품테이블의 총 판매가격 평균값을 구하시오
-- ALIAS는 상품 총판매가격 평균

SELECT AVG(PROD_SALE) AS 총판매가격평균
FROM PROD;

 

-- 상품테이블의 상품분류별 판매가격 평균값을 구하시오
-- ALIAS는 상품분류, 상품분류별판매가격평균

SELECT PROD_LGU
	, ROUND(AVG(PROD_SALE) ,2)
FROM PROD
GROUP BY PROD_LGU;

▶ COUNT

COUNT 조회 범위 내 해당 컬럼들의 자료 수
선택된 자료의 수
-- 거래처 테이블의 담당자(BUYER_CHARGER)를 컬럼으로 하여 COUNT 집계하시오
-- ALIAS는 자료수(DISTINCT), 자료수, 자료수(*)

SELECT COUNT(DISTINCT BUYER_CHARGER) AS 중복제거한자료수
, COUNT(BUYER_CHARGER) AS 자료수
, COUNT(*)
FROM BUYER;

-- 회원테이블의 취미별 COUNT 집계하시오
-- ALIAS는 취미, 자료수, 자료수(*)

SELECT MEM_LIKE AS 취미
, COUNT(MEM_LIKE) AS 자료수
, COUNT(*) AS 자료수
FROM MEMBER
GROUP BY MEM_LIKE;

▶ MAX / MIN

MAX(col),
MIN(col)
조회 범위 내 해당 컬럼들 중 최대값과 최소값

여러 건의 데이터를 순서대로 정렬 후, 그 중에서 최댓값/최솟값 추출.
따라서 시간이 오래 걸리는 함수 중 한 가지이므로 사용 시 주의가 필요함.
대신 인덱스를 활용하는 것이 좋음.
-- 장바구니테이블의 회원별, 최대구매수량을 검색하시오.
-- ALIAS는 회원ID, 최대수량, 최소수량

SELECT CART_MEMBER AS 회원ID
, MAX(DISTINCT CART_QTY) AS 중복제거최대수량
, MAX(CART_QTY)
, MIN(DISTINCT CART_QTY) AS 중복제거최소수량
, MIN(CART_QTY) AS 최소수량
FROM CART
GROUP BY CART_MEMBER;

▶ SUM

SUM(column) 조회 범위 내 해당 컬럼들의 합계
-- 상품테이블(PROD)의 상품분류(PROD_LGU)별 판매가(PROD_SALE)합계값
SELECT PROD_LGU
, SUM(PROD_SALE) AS 분류별판매가합계
FROM PROD
GROUP BY PROD_LGU;

▶ GROUP

GROUP 집계함수를 제외한 SELECT절에 기술된 column명들은 모두 GROUP BY절에 기술
-- 상품테이블에서 거래처, 상품분류별로 최고판매가, 최소판매가 자료 수를 검색하시오.

SELECT PROD_BUYER AS 거래처
, PROD_LGU AS 상품분류
, MAX(PROD_SALE) AS 최고판매가
, MIN(PROD_SALE) AS 최소판매가
, COUNT(PROD_SALE) AS 자료수
FROM PROD
GROUP BY PROD_BUYER, PROD_LGU
ORDER BY PROD_BUYER, PROD_LGU;

▶ ROLLUP

▶ CUBE

▶ HAVING

HAVING - WHERE절에서는 집계함수(SUM, AVG, MAX, MIN, COUNT)를 사용할 수 없다.

- HAVING절은 집계함수를 가지고 조건비교할 때 사용한다.

- HAVING절은 GROUP BY절과 함께 사용이 되고, GROUP BY절 다음에 사용해야한다.

- HAVING절에 올 수 있는 컬럼은 (+ 조작된 컬럼 포함) GROUP BY 시의 SELECT절에 사용된 컬럼으로 한정한다.

-GROUP BY가 사용된 SELECT 절에 없는 컬럼은 WHERE절에서만 조건으로 사용할 수 있다.
SELECT SUBSTR(MEM_ADD1,1,2) AS 지역
, MEM_LIKE AS 취미
, COUNT(*) AS 사람수
FROM MEMBER
WHERE '19'|| SUBSTR(MEM_REGNO1,1,2) = TO_CHAR(MEM_BIR,'YYYY')
GROUP BY SUBSTR(MEM_ADD1,1,2), MEM_LIKE
HAVING COUNT(*) >= 2
ORDER BY 1,2;

'DataBase' 카테고리의 다른 글

[Oracle DB 입문 12] JOIN(1)  (0) 2021.03.12
[Oracle DB 입문 10] SQL 함수  (0) 2021.03.09
[Oracle DB 입문 09] SQL 함수  (0) 2021.03.08
[Oracle DB 입문 08] SQL 예제  (0) 2021.03.05
[Oracle DB 입문 07] SQL 예제  (0) 2021.03.03

관련글 더보기