웹프로그래밍/데이터베이스

오라클 SQL - 일반함수, 그룹함수

Gamcho 2018. 6. 20. 12:09

--##일반 함수

-- NULL 값을 0으로 반환 NVL

SELECT ENAME, SAL, COMM, JOB FROM EMP ORDER BY JOB;

SELECT ENAME, SAL, COMM, NVL(COMM, 0), JOB FROM EMP ORDER BY JOB;


-- 커미션을 포함한 연봉계산시 NULL 값 반환

--NULL값이 포함된 연산 결과는 NULL

SELECT ENAME, SAL, COMM, SAL*12, SAL*12+COMM FROM EMP ORDER BY JOB;

-- NULL값을 0으로 변환 후 커미션을 포함한 연봉계산

SELECT ENAME , SAL, COMM, SAL*12+NVL(COMM, 0) FROM EMP ORDER BY JOB;


--SWICH CASE문과 비슷한 DECODE 함수

--DEPTNO 칼럼 값에 따라서 부서명 할당

SELECT DEPTNO, DECODE(DEPTNO, 10, 'ACCOUNTING', 20, 

'RESEARCH', 30, 'SALES', 40, 'OPERATIONS') AS DNAME FROM EMP;


--조건에 따라 처리하는 CASE 함수

SELECT ENAME, DEPTNO, CASE WHEN DEPTNO=10 THEN 'ACCOUNTING' 

WHEN DEPTNO=20 THEN 'RESEARCH' WHEN DEPTNO=30 THEN 'SALES' END DNAME FROM EMP;


--##GROUP BY 그룹 함수

--합계

SELECT SUM(SAL) FROM EMP;

--평균

SELECT AVG(SAL) FROM EMP;

--최대, 최소

SELECT MIN(SAL), MAX(SAL) FROM EMP;

--오류발생, 그룹함수가 적용되지 않은 칼럼은 로우 갯수가 그대로 나온다.

SELECT ENAME, MIN(SAL) FROM EMP;

--COUNT

SELECT COUNT(COMM) FROM EMP;

SELECT COUNT(*), COUNT(COMM) FROM EMP;

--GROUP BY

--DEPTNO 칼럼 값을 기준으로 그룹을 나눈 후 그룹 연산

SELECT DEPTNO FROM EMP GROUP BY DEPTNO;

SELECT DEPTNO, SUM(SAL), AVG(SAL) FROM EMP GROUP BY DEPTNO;

SELECT DEPTNO, MIN(SAL), MAX(SAL) FROM EMP GROUP BY DEPTNO;


--HAVING

--그룹 결과 제한할때 사용

SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) >= 2000;

SELECT DEPTNO, MAX(SAL), MIN(SAL) FROM EMP GROUP BY DEPTNO HAVING MAX(SAL) >2900;