728x90
: 집계 함수
- 전체데이터를 그룹별로 구분하여 통계적인 결과를 구하기 위해 사용
- 결과값은 항상 단행
- 그룹함수와 단순컬럼은 함께 사용하는 것이 불가능
(만약 그룹함수와 함께 사용하고자 하는 컬럼이 그룹으로 묶여질 수 있다면
group by절과 함께 사용하는 것이 가능) - NULL은 결과값에서 제외
GROUP BY / HAVING
group by(그룹을 묶을 수 있는) 컬럼명
group by deptno--> (10번부서의 사원들) , (20번 부서의 사원들), (30번 부서의 사원들)
having (그룹에 대한) 조건식--> group by와 반드시 함께 사용
having deptno = 10 --3개의 그룹중 10번부서의 사원들만
having avg(sal) >= 2000 -- 10번, 20번, 30번 부서 각각의 평균 급여를 비교
그룹함수 종류
SUM(총합), AVG(평균), COUNT(행갯수), MIN(최소값), MAX(최대값),
STDDEV(표준편차), VARIANCE(분산)
-- COUNT. 모든 행의 갯수 구하기
SELECT COUNT(*) FROM emp;
-- MIN. 오래된 날짜 구하기
SELECT MIN(TO_CHAR(hiredate,'yyyy-mm-dd')) 오래된입사일 from emp;
-- AVG. 평균급여 출력
SELECT deptno, avg(sal) FROM emp GROUP BY deptno HAVING avg(sal)>=2000;
-- SELECT empno, ename, sal FROM emp WHERE AVG(sal)<sal;
--> 에러발생. group function. WHERE절에서는 그룹함수 사용 불가
SELECT deptno, AVG(sal) FROM emp WHERE sal>=1000
GROUP BY deptno HAVING AVG(sal)>=2000;
-- 서브쿼리사용
SELECT empno, ename, sal FROM emp WHERE sal>= (SELECT avg(sal) FROM emp);
그룹함수와 일반컬럼 사용
select count(*) from emp; (O)
select deptno, count(*) from emp; (X)
select deptno, count(*) from emp group by deptno; (O)
select decode(1,2,3), count(*) from emp; (X)
select decode(1,2,3), count(*) from emp group by decode(1,2,3); (O)
DECODE 함수
DECODE (컬럼명,
비교데이터1, 결과데이터1,
비교데이터2, 결과데이터2,
비교데이터3, 결과데이터3 ...)
SELECT empno, ename, deptno, decode(deptno,
10,'ACCOUNTING',
20,'RESEARCH',
30,'SALES',
40,'OPERATIONS') 부서명 FROM emp ;
-- deptno 홀짝 구분
SELECT empno, ename, deptno, decode(mod(empno,2),
0,'짝수',
1,'홀수') 사원번호 FROM emp;
'Web develop > SQL' 카테고리의 다른 글
[SQL/ORACLE] ORACLE JOIN & ANCI JOIN (0) | 2019.06.15 |
---|---|
[SQL/ORACLE] CASE 함수 사용예제 (Simple / Searched) (0) | 2019.05.29 |
[SQL/ORACLE] 날짜 함수 , 형변환 함수 (0) | 2019.05.28 |
[SQL/ORACLE] 숫자 함수, 문자 함수 (0) | 2019.05.28 |
[SQL/ORACLE] SELECT절 (실행순서, 연산자, WHERE, ORDER BY) (0) | 2019.05.27 |