개발자 미니민의 개발스터디

[Oracle] 오라클 - 집계함수(COUNT), SUM/MAX/MIN/AVG

by mini_min
[Oracle]
오라클 - 집계함수 (COUNT)

✔️ 집계 함수란?

- 단일 행이 아닌, 행 그룹을 기반으로 단일 결과 행을 반환하는 함수이다.

집계 함수는 SELECT, ORDER BY, HAVING 절에서 사용가능, WHERE 에서 사용할 수 없다. 

 

 

✔️ 집계 함수 종류

- COUNT( * ) : 자료 개수 계산할 때 사용

❌ NULL 컬럼은 카운트 불가.

 

-- ex) 부서 수 구하기

SELECT COUNT(dept) FROM emp;
SELECT COUNT(DISTINCT dept) FROM emp;

 

 

- SUM([ DISTINCT | ALL ] expr)

- AVG([ DISTINCT | ALL ] expr)

- MAX([ DISTINCT | ALL ] expr)

- MIN([ DISTINCT | ALL ] expr)

❌ WHERE 절에서 집계 함수 사용 불가!

= 서브쿼리 사용해주면 된다.

❌ 일반 컬럼이랑 집계함수를 같이 사용하면 에러발생!

=GROUP BY와 같이 사용해줘야한다.

SELECT name, SUM(sal) FROM emp;+
	--일반 컬럼이랑 집계함수를 같이 사용하면 에러가 발생한다.

 

 

🔒 문제

-- 월별 입사 인원수 구하기 (날짜 형식이 아닌 경우 오류 발생할 수 있음) 

SELECT COUNT(*), 
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '01', 1)) "1월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '02', 1)) "2월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '03', 1)) "3월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '04', 1)) "4월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '05', 1)) "5월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '06', 1)) "6월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '07', 1)) "7월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '08', 1)) "8월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '09', 1)) "9월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '10', 1)) "10월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '11', 1)) "11월",
    COUNT(DECODE(TO_CHAR(hireDate, 'MM'), '12', 1)) "12월"
FROM emp;

 

 

-- 급여(sal) 를 가장 많이 받는 사람

SELECT name, sal FROM emp WHERE sal= (SELECT MAX(sal) FROM emp);

 

 

-- 전체  남 여  : sal 의 합

WITH tb AS(
	SELECT SUM(sal) 전체, 
	SUM(DECODE(MOD(SUBSTR(rrn,8,1),2),1,sal)) 남자, 
    SUM(DECODE(MOD(SUBSTR(rrn,8,1),2),0,sal)) 여자
    FROM emp
) SELECT 전체, 남자, 여자 FROM tb;

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기