[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;
'SQL쿼리' 카테고리의 다른 글
[Oracle] 오라클 - 단일행 날짜 함수 (TO_DATE/TO_CHAR/INTERVAL) (0) | 2022.08.09 |
---|---|
[Oracle] 오라클 - GROUP BY절 (HAVING 절) (0) | 2022.08.08 |
[Oracle] 오라클 - 단일행 문자 함수 (LPAD/RPAD/TRIM/TRANSLATE) (0) | 2022.08.06 |
[Oracle] 오라클 - 단일행 문자 함수 (INSTR/LENGTH/REPLACE/CONCAT) (0) | 2022.08.06 |
[Oracle] 오라클 - 단일행 문자 함수 (LOWER/UPPER/INITCAP/SUBSTR) (0) | 2022.08.06 |
블로그의 정보
개발자 미니민의 개발로그
mini_min