스퐁지송 개발노트

데이터베이스 그룹함수(COUNT,SUM,MAX,MIN,AVG),그룹화(GROUP BY) 본문

DATABASE

데이터베이스 그룹함수(COUNT,SUM,MAX,MIN,AVG),그룹화(GROUP BY)

강준석 2023. 1. 10. 18:15
728x90

그룹함수

COUNT

SELECT COUNT(*) FROM EMP;

전체 총 레코드의 수를 세줌

 

SELECT COUNT(ENAME) FROM EMP;

-> 필드값을 줄순 있지만 NULL값은 갯수에 포함해서 세주지않므로

(*) -> 전체갯수를 셀땐 

 

EX)직책이 MANAGER인 사람들의 인원수

SELECT COUNT(*) FROM EMP WHERE JOB='MANAGER';

 

EX)추가수당이 없는 사람수

SELECT COUNT(*) FROM EMP WHERE COMM IS NULL OR COMM=0;
(NULL인 사람과 0인 사람이 있기때문)

 


SUM

SELECT SUM(SAL) FROM EMP;

총합계 구하기

 

EX) 급여와 추가수당의 합계

SELECT SUM(SAL), SUM(COMM) FROM EMP;

 

EX)부서번호가 20인 사람들의 급여 합계

SELECT SUM(SAL) FROM EMP WHERE DEPTNO=20;

 


MAX, MIN, AVG

최대값 최소값 평균

 

예시)

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

 


그룹화

 GROUP BY

 형식)

SELECT 컬럼(*)

FROM 테이블명

WHERE 조건식(레코드에 대한 조건식)

GROUP BY 그룹화할 컬럼

HAVING 그룹에 대한 조건식

ORDER BY 정렬할 컬럼

 

EX) 부서번호별 급여의 평균 계산해서 출력

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

DEPTNO(부서번호)별로 그룹화되어 SAL(급여)의 평균 출력

 

 

 

 

 

EX) 직책별 부서버번호별 인원수와 급여의 합계를 출력

SELECT JOB,COUNT(*),SUM(SAL),DEPTNO
    FROM EMP
GROUP BY JOB,DEPTNO;

JOB, DEPTNO별로 그룹화되어 해당 JOB과 DEPTNO별로

COUNT와 SAL합계 출력

 

 

 

 

 

 

 

 

 

EX) 직책별 급여 합계를 출력, 급여합계가 5000이상인것만(조건이 들어감) 

SELECT JOB AS 직책,SUM(SAL) AS 급여합계
    FROM EMP
GROUP BY JOB 
    HAVING SUM(SAL)>=5000; 
-- 그룹에 대한 조건식은 WHERE이 아닌 HAVING 조건식이 들어감

 

EX)부서번호별 직책별 급여가 2000이상인 급여평균을 출력 단, 급여평균은 2500이상인 데이터만 표시

부서번호 기준으로 오름차순, 직책을 기준으로 내림차순 정렬

SELECT DEPTNO, JOB, AVG(SAL)
    FROM EMP
WHERE SAL>=2000 -- 다 제외가 된 후에 평균 계산이 시작
GROUP BY DEPTNO, JOB --부서번호 기준, 직책 정렬
    HAVING AVG(SAL)>=2500
    ORDER BY DEPTNO, JOB DESC; --DEPTNO는 어차피 기본값이 오름차순이라 ASC 생략

 

EX)부서번호별 급여평균 , 최고급여,최저급여,인원수를 출력

      급여평균은 소수첫째자리에서 반올림

SELECT DEPTNO AS 부서번호,
    ROUND(AVG(SAL),0) AS 급여평균,  -- 평균급여의 소숫점첫째자리까지
    MAX(SAL) AS 최고급여,
    MIN(SAL) AS 최소급여,
    COUNT(*) AS 인원수
    FROM EMP
GROUP BY DEPTNO;

EX)직책이 동일한 인원수가 3명 이상인 데이터만  직책,인원수출력

 

728x90
Comments