국비/Oracle

[02-1] Oracle DML (SELECT) 그룹함수 ☆☆

박머루 2022. 5. 2. 20:41
그룹함수
N개의 값을 읽어 1개의 결과를 반환 (그룹별로 하나의 결과를 내놓음)
결과는 언제나 하나!!!!

-- SUM(숫자타입컬럼) : 해당 컬럼값들의 총 합계 반환

[예시]
- 전체 사원들의 총 급여 합계
SELECT SUM(SALARY) 급여합계
FROM EMPLOYEE;

-- AVG(숫자타입컬럼) : 해당 컬럼값들의 평균값을 구해서 반환

[예시]
- 전체 사원들의 평균 급여
SELECT ROUND(AVG(SALARY))
FROM EMPLOYEE;

-- MIN(숫자타입컬럼) : 해당 컬럼값들의 가장 작은 값 반환

[예시]
- 전체 사원들 중 최저급여, 가장 예전에 입사한 날짜, 가장 작은 이름값(가나다)
SELECT MIN(SALARY), MIN(HIRE_DATE), MIN(NAME)
  FROM EMPLOYEE;


-- MAX(숫자타입컬럼) : 해당 컬럼값들의 가장 큰 값 반환

[예시]
SELECT MAX(SALARY), MAX(HIRE_DATE), MAX(EMP_NAME)
  FROM EMPLOYEE;

-- COUNT : 조회된 행 개수 반환

-- COUNT(*) : 조회 결과에 해당하는 모든 행 개수를 세서 반환

-- COUNT(컬럼명) : NULL이 아닌 행 개수만 세서 반환

-- COUNT(DISTINCT 컬럼명) : 중복값이 있을 경우 하나로만 개수 COUNT, NULL 포함X

-- 1. 직원명과 주민번호 조회함
-- 단, 주민번호 9번째 자리부터 끝까지 ** 문자로 채움
SELECT DEPT_NAME, RPAD(SUBSTR(EMP_NO, 1, 8) , 14, '*'))
FROM EMPLOYEE;

-- 2. 직원명, 직급코드, 연봉(원) 조회
-- 단 연봉은 000,000,00으로 표시되게
-- 연봉은 보너스 적용된 1년치 급여

SELECT EMP_NAME, JOB_CODE, TO_CHAR((SALARY + (SALARY * NVL(BONUS, 0) ) * 12), 'L999,999,999')
FROM EMPLOYEE;

--3. 부서코드 D5, D9인 직원들 중 2004년도에 입사한 직원의 수 

SELECT COUNT(*)
FROM EMPLOYEE
WHERE DEPT_CODE IN('D5', 'D9')
    AND SUBSTR(HIRE_DATE, 1, 2) = '04'
-- WHERE SUBSTR(HIRE_DATE, 1, 2) = '04'  AND(DEPT_CODE = 'D5' OR DEPT_CODE = 'D9');