본문 바로가기

database/oracle

8. oracle (복수행 함수, GROUP BY, HAVING)

 

복수행 함수
여러개의 row 당 하나의 결과값을 반환하는 함수.

 


COUNT(칼럼명)
해당 칼럼이 존재하는 ROW 의 갯수를 반환한다. 단, 저장된 데이터가 NULL 인 칼럼은 세지 않는다.
SQL>SELECT COUNT(ename) FROM emp;
SQL>SELECT COUNT(comm) FROM emp;
SQL>SELECT COUNT(*) FROM emp ;

SUM(칼럼명)
해당 칼럼의 값을 모두 더한 값을 리턴한다.
SQL>SELECT SUM(sal) FROM emp;

AVG(칼럼명)
해당 칼럼의 값을 모든값을 더한후 ROW 의 갯수로 나눈 평균값을 리턴한다. 단 NULL 칼럼은 제외된다.
SQL>SELECT AVG(sal) FROM emp;
SQL>SELECT AVG(comm) FROM emp;

ex) comm 이 NULL 인 사원도 평균에 포함 시켜서 출력을 하려면? hint : NVL() 함수를 이용한다.
SQL>SELECT AVG( NVL( comm , 0 ) ) FROM emp;

MAX(칼럼명)
최대값을 리턴한다.
SQL>SELECT MAX(sal) FROM emp;

MIN(칼럼명)
최소값을 리턴한다.
SQL>SELECT MIN(sal) FROM emp;


GROUP BY
그룹으로 묶을 때 사용한다.

 

ex)

부서별 급여의 총합을 출력하라.
SQL>SELECT deptno,SUM(sal)
FROM emp
GROUP BY deptno ;

부서별 평균 급여를 구해보세요. (반올림해서 소수 첫째 자리 까지만)
SQL>SELECT deptno, ROUND( AVG(sal) , 1 )
FROM emp 
GROUP BY deptno;

직업별 최대 급여를 구해보세요.
SQL>SELECT job, MAX(sal) 
FROM emp
GROUP BY job ;

급여가 1000 이상인 사원들의 부서별 평균 급여의 반올림 값을 부서번호로 내림차순 정렬해서 출력해 보세요.
SQL>SELECT deptno, ROUND( AVG(sal) )
FROM emp
WHERE sal >= 1000
GROUP BY deptno
ORDER BY deptno DESC ;

급여가 2000 이상인 사원들의 부서별 평균 급여의 반올림 값을 평균 급여의 반올림 값으로 오름차순 정렬해서 출력해 보세요.
SQL>SELECT deptno, ROUND( AVG(sal) ) 
FROM emp
WHERE sal >= 2000
GROUP BY deptno
ORDER BY ROUND( AVG(sal) ) ASC ;

각 부서별 같은 업무(job)를 하는 사람의 인원수를 구해서 부서번호, 업무(job), 인원수를 부서번호에 대해서 오름차순 정렬해서 출력해 보세요.
SQL>SELECT deptno, job, count(*)
FROM emp
GROUP BY deptno, job
ORDER BY deptno ASC;

급여가 1000 이상인 사원들의 부서별 평균 급여를 출력해보세요. 단, 부서별 평균 급여가 2000 이상인 부서만 출력하세요.
SQL>SELECT deptno, AVG(sal)
FROM emp
WHERE sal >= 1000
GROUP BY deptno
HAVING AVG(sal) >= 2000 ; 

'database > oracle' 카테고리의 다른 글

oracle quiz  (0) 2022.07.14
9. oracle(JOIN)  (0) 2022.07.14
7. oracle (단일행 함수, 숫자 함수, 날짜 함수, 변환함수)  (0) 2022.07.14
6. oracle(단일행 함수,문자 함수)  (0) 2022.07.14
5. oracle (SPOOL, HOST)  (0) 2022.07.14