| 구분 | 설명 |
|---|---|
| SUM | 그룹의 누적 합계를 반환한다. |
| AVG | 그룹의 평균을 반환한다. |
| COUNT | 그룹의 총 개수를 반환한다. |
| MAX | 그룹의 최대값을 반환한다. |
| MIN | 그룹의 최소값을 반환한다. |
| STDDEV | 그룹의 표준편차를 반환한다. |
| VARIANCE | 그룹의 분산을 반환한다. |
# 모든 사원들의 월급의 합계를 출력
SELECT SUM(sal) FROM emp;
❗. 커미션의 총합을 구해도 NULL 값으로 출력되지 않는다. 왜냐하면
그룹 함수는 다른 연산자와는 달리 해당 칼럼 값이 NULL 인 것을 제외하고 계산하기 때문이다.
# 평균 급여
SELECT AVG(sal) FROM emp;
# 사원들 중 가장 높은 급여를 받는 사원의 sal를 출력
SELECT MAX(sal) FROM emp;
#사원들 중 가장 낮은 급여를 받는 사람의 이름과 급여를 출력
SELECT ename,MIN(sal) FROM emp;
#문데 : 최근에 입사한 사원의 이름과 입사일을 출력
SELECT ename, MAX(hiredate) FROM emp;
# 사원수를 출력하세요
SELECT COUNT(empno) FROM emp;
# COUNT(*)처럼 *를 적용하면 테이블의 전체 로우 수
SELECT COUNT(*) FROM emp;
# 이렇게 넣으면 null 이 아닌것만 카운팅 되서 값이 달라짐
SELECT COUNT(comm) FROM emp;
# 직업 종류의 갯수르 구하세여
#종류를 구하는건데 전체 job의 갯수가 잡힘
SELECT COUNT(job) FROM emp;
# 이렇게 하면 중복은 1개로 처리된다
SELECT COUNT(DISTINCT job) FROM emp;
# 문자 : 10번 부서 소속 사원 중 커미션을 받는 사람의 수
SELECT COUNT(comm) FROM emp
WHERE deptno = 10 ; # 다 null이라 0
SELECT * FROM emp WHERE deptno = 10;
GROUP BY 절 뒤에 해당 컬럼을 기술하면 된다.
소속 부서별 평균 급여 예제
# 소속 부서별 평균 급여를 구하세여
SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno;

주의할 점 ❗
#주의할 사항 1
SELECT deptno, job , AVG(sal)
FROM emp
GROUP BY deptno;

다음과 같은 쿼리의 문제점은 job 컬럼이 포함되어있다는 것이다.
job을 함께 선택하면 각 부서에 속한 job의 가장 상단만 나와 정확성이 떨어질 수 있다.
해결 방법
필요한 집계 결과만 남기고 나머지 컬럼은 제외하는 것이 좋다.
기준을 다수로 둘거라면 아래와 같이 모든 컬럼에 대해 GROUP BY를 설정해줘야 한다.
SELECT deptno, job , AVG(sal)
FROM emp
GROUP BY deptno,job;

이외 예제
# 문제 : 부서별 사원수와 커미션을 받는 사원수를 출력
SELECT deptno, COUNT(empno),COUNT(comm) FROM emp GROUP BY deptno;
# 문제 : 부서별 최대 급여 최소급여
SELECT deptno, MAX(sal), MIN(sal) FROM emp GROUP BY deptno;
그룹의 결과를 제한할 때는 HAVING 절을 사용한다.예제
# 부서별로 그룹 지은 후(GROUP BY), 그룹 지어진 부서별 평균
# 급여가 2000 이상인(HAVING) 부서번호와 부서별 평균 급여를 출력
SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno
HAVING AVG(sal) >= 2000;
# 문제: 평균급여가 2900이상인 부서의 최대급여 최소급여
SELECT deptno, max(sal),MIN(sal)
FROM emp
GROUP BY deptno
HAVING AVG(sal) >= 2900;
부서별과 직업별로 급여를 집계하는 쿼리, 각 부서별로 총 매출과 전체 매출 출력 예제
SELECT deptno,job, SUM(sal) AS "부서별 합계"
FROM emp
GROUP BY deptno,job WITH ROLLUP
부서별과 직업별로 급여를 집계하는 쿼리, 각 직업별로 총 매출과 전체 매출 출력 예제
SELECT job, deptno, SUM(sal) AS "직업별 합계"
FROM emp
GROUP BY job, deptno WITH ROLLUP;
