[Oracle/오라클] 그룹함수
그룹 함수
- 복수개의 행을 대상으로 연산
- SUM, AVG, COUNT, MAX, MIN
- 그룹함수와 일반컬럼이 SELECT 절에 사용되면 반드시 GROUP BY절이 SELECT 절 다음에 기술되어야 함.
SELECT [ 컬럼명1,... ]
SUM (컬럼명) | AVG (컬럼명) | COUNT (컬럼명 | * ) | MAX (컬럼명) | MIN (컬럼명) ,
FROM 테이블명
[ WHERE 조건 ]
[ GROUP BY 컬럼명 [ , 컬럼명 , ... ]
[ HAVING 조건 ]
[ ORDER BY 컬럼명 | 컬럼인덱스 [ [ ASC ] | [ DESC ] ,... ] ;
1. SUM (COL)
- 자료를 그룹으로 묶고 그 그룹내의 컬럼에 대한 합계를 구함
- SELECT 절에 일반 컬럼없이 SUM 함수만 사용되면 테이블 전체가 하나의 그룹으로 간주 ( GROUP BY 절 생략 )
ex) 회원테이블에서 회원들의 거주지별 마일리지 합계를 구하시오.
SELECT SUBSTR(mem_add1,1,2) AS 거주지,
SUM(mem_mileage) AS 마일리지합계
FROM member
GROUP BY SUBSTR(mem_add1,1,2);
-- 출력 결과 --
2. AVG (COL)
- COL에 저장된 데이터의 평균값을 구하여 반환
ex) 사원테이블에서 직무별 평균급여를 소숫점 한자리까지 구하여 출력하시오.
Alias는 직무명과 평균급여이다.
SELECT B.job_title AS 직무명,
ROUND(AVG(A.salary),1) AS 평균급여
FROM employees A, jobs B
WHERE A.job_id = B.job_id
GROUP BY B.job_title;
-- 출력 결과 --
3. COUNT ( * | COL )
- 그룹 내의 자료(행)의 수를 반환
- ' * '나 컬럼명을 기술해도 동일 결과 반환
단, 외부조인에 사용할 때 '*' 사용 할 수 없음. 주로 기본키 컬럼명 사용
ex) 사원테이블에서 부서별 사원 수를 조회하시오.
SELECT department_id AS 부서코드,
COUNT(*) AS 사원수1,
COUNT(emp_name) AS 사원수2
FROM employees
GROUP BY department_id
ORDER BY 1;
-- 출력 결과 --