[ORACLE] SQL DEVELOPER 2일차 - 그룹함수
그룹함수
그룹함수
: 값을 여러 개 전달받아 처리하여 결과값을 반환하는 함수
COUNT(컬럼명) : 컬럼값의 갯수를 반환하는 함수 - 검색행의 갯수 반환
--EMPNO 갯수
SELECT COUNT(EMPNO) FROM EMP;
질의 결과
*그룹함수는 다른 검색대상과 같이 사용 불가능 - 검색대상의 검색행의 갯수가 서로 다르므로 에러 발생
SELECT EMPNO,ENAME,COUNT(EMPNO) FROM EMP;
--에러 발생 : COUNT(EMPNO) 하나의 행, EMPNO,ENAME 여러개의 행
*그룹함수는 NULL를 값으로 인식하지 않아 미처리
SELECT COUNT(EMPNO),COUNT(COMM) FROM EMP;
질의 결과
SELECT COUNT(*)FROM EMP;
질의 결과
MAX(컬럼명) : 컬럼값 중 최대값을 반환하는 함수
SELECT MAX(SAL) FROM EMP;
SELECT MAX(ENAME) FROM EMP;
SELECT MAX(HIREDATE) FROM EMP;
질의 결과
MIN(컬럼명) : 컬럼값 중 최소값을 반환하는 함수
SELECT MIN(SAL) FROM EMP;
SELECT MIN(ENAME) FROM EMP;
SELECT MIN(HIREDATE) FROM EMP;
질의 결과
SUM(컬럼명) : 숫자형 컬럼의 값을 전달받아 합계를 계산하여 반환하는 함수
SELECT SUM(SAL) FROM EMP
AVG(컬럼명) : 숫자형 컬럼의 값을 전달받아 평균을 계산하여 반환하는 함수
--소수점 막 나옴
SELECT AVG(SAL) FROM EMP;
--소수점 둘째자리까지 나오도록 계산 (EX 2073.21)
SELECT ROUND(AVG(SAL),2) FROM EMP; --달러면 ROUND 사용 가능
--EMP 테이블에서 모든 사원의 평균 성과급을 계산하여 검색
--성과급이 NULL이 아닌 사원들에 대한 평균 급여 검색
SELECT AVG(COMM) FROM EMP; --잘못된 값, 커미션이 NULL인 사원은 계산되지 않았다
질의 결과 -- 잘못된 값
--EMP 테이블에서 모든 사원의 평균 성과급을 계산하여 검색
--성과급이 NULL이 아닌 사원들에 대한 평균 급여 검색
--NVL 함수를 사용하여 성과급이 NULL인 경우 0으로 변환하여 평균 성과급을 계산하여 검색
SELECT CEIL(AVG(NVL(COMM,0))) "평균 성과급" FROM EMP;
질의 결과 -- NULL을 0으로 바꿔 더해준 올바른 값
--EMP 테이블에 저장된 모든 사원에 대한 인원수 검색
SELECT COUNT(*) FROM EMP;
질의 결과값
--EMP 테이블에 저장된 부서별 사원 인원수 검색
SELECT DISTINCT DEPTNO FROM EMP;
SELECT COUNT(*) FROM EMP WHERE DEPTNO=10;
SELECT COUNT(*) FROM EMP WHERE DEPTNO=20;
SELECT COUNT(*) FROM EMP WHERE DEPTNO=30;
질의 결과값
GROUP BY : 그룹함수를 사용할 경우 컬럼값으로 그룹을 구분하여 검색하는 기능*
-> 컬럼값이 같은 경우 같은 그룹으로 처리
--형식)SELECT 그룹함수[,검색대상...] FROM 테이블명,테이블명,... [WHERE 조건식]
-- GROUP BY {컬럼명|연산식|함수},... [ORDER BY {컬럼명|연산식|별칭|첨자} {ASC|DESC},...]
--EMP 테이블에 저장된 부서별 사원 인원수 검색
SELECT COUNT(*) FROM EMP GROUP BY DEPTNO;
질의 결과
*GROUP BY 구문에서 사용된 그룹 표현식은 그룹함수와 같이 검색대상으로 사용 가능
SELECT DEPTNO,COUNT(*) FROM EMP GROUP BY DEPTNO ORDER BY DEPTNO;
질의 결과
--검색대상의 별칭은 GROUP BY 구문의 그룹 표현식으로 사용할 경우 에러 발생
SELECT DEPTNO DNO,COUNT(*) FROM EMP GROUP BY DNO;--에러 발생
--EMP 테이블에서 모든 사원의 업무별 평균 급여 검색
SELECT JOB,CEIL(AVG(SAL)) AVG_SAL FROM EMP GROUP BY JOB;
질의 결과
--EMP 테이블에서 업무가 [PRESIDENT]인 사원을 제외한 모든 사원의 업무별 평균 급여 검색
SELECT JOB,CEIL(AVG(SAL)) AVG_SAL FROM EMP WHERE JOB<>'PRESIDENT' GROUP BY JOB; --WHERE 값을 쓰는게 더 맞음
SELECT JOB,CEIL(AVG(SAL)) AVG_SAL FROM EMP GROUP BY JOB HAVING JOB<>'PRESIDENT';
질의 결과
ASC|DESC : 오름차순|내림차순
--EMP 테이블에서 업무가 [PRESIDENT]인 사원을 제외한 모든 사원의 업무별 평균 급여를 평균 급여로 내림차순 정렬하여 검색
SELECT JOB,CEIL(AVG(SAL)) AVG_SAL FROM EMP WHERE JOB<>'PRESIDENT' GROUP BY JOB ORDER BY AVG_SAL DESC;
질의 결과
HAVING : GROUP BY 구문으로 그룹화된 검색 결과의 그룹조건을 제공하여 검색하는 기능
--형식)SELECT 그룹함수[,검색대상...] FROM 테이블명,테이블명,... [WHERE 조건식]
-- GROUP BY {컬럼명|연산식|함수},... HAVING 그룹조건식 [ORDER BY {컬럼명|연산식|별칭|첨자} {ASC|DESC},...]
--EMP 테이블에서 모든 사원의 부서별 급여 합계 중 급여 합계가 9000이상인 부서 검색
SELECT DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO HAVING SUM(SAL)>=9000;
질의 결과
Author And Source
이 문제에 관하여([ORACLE] SQL DEVELOPER 2일차 - 그룹함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jeong11/ORACLE-SQL-DEVELOPER-2일차-그룹함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)