본문 바로가기
DataBase/Oracle

DQL) GROUP BY 구문

by 박채니 2022. 4. 18.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


GROUP BY

- 테이블 전체 행을 특정 컬럼이 동일한 행끼리 그룹핑 처리

- group by절이 없다면, 테이블 모든 행이 하나의 그룹으로 처리

- group by에 명시한 컬럼만이 select절에 사용될 수 있음

 

부서 별로 급여 합계/평균

select
    dept_code,
    sum(salary) sum_sal,
    trunc(avg(salary)) avg_sal
from
    employee
group by
    dept_code
order by
    sum_sal desc;

 

부서 별로 인원 수 조회 (인원 수 내림차순)

select
    dept_code,
    count(*) 인원수
from
    employee
group by
    dept_code
order by
    인원수 desc;

 

사원 테이블에서 J1 직급을 제외하고, 직급 별 사원 수, 평균 급여 조회 (직급별 오름차순 정렬)

select
    job_code 직급,
    count(*) || '명' 사원수,
    trunc(avg(salary)) 평균급여
from
    employee
where
    job_code != 'J1'
group by
    job_code
order by
    직급;

 

입사년도 별 사원 수 조회

※ 테이블 별칭에는 as, "" 불가

select
    extract(year from hire_date) 입사년도,
    count(*) || '명' 사원수
from
    employee e  -- 테이블 별칭에는 as, "" 불가
group by
    extract(year from hire_date)
order by
    입사년도;

 

성별 인원 수

select
    decode(substr(emp_no, 8, 1), 1, '남', 3, '남', '여') 성별,
    count(*) || '명' 인원수
from
    employee
group by
    decode(substr(emp_no, 8, 1), 1, '남', 3, '남', '여');

 

부서 별, 직급 별 인원 수를 조회

※ 실제로는 distinct 처리와 같이 두 컬럼의 값이 동일한 행을 그룹핑 (group by 컬럼 순서는 중요 X)

select
    dept_code 부서,
    job_code 직급,
    count(*) 인원수
from
    employee
group by
    dept_code, job_code
order by
    1, 2;

group by절의 컬럼이 두 개 이상인 경우에는, 해당 컬럼들의 값이 동일한 행들을 그룹핑하게 됩니다.

예를 들어서, 부서코드가 'D1'이면서 직급코드가 'J6'인 인원 수를 카운트 / 부서코드가 'D1'이면서 직급코드가 'J7'인 인원 수 카운트 .... 와 같이 두 컬럼을 묶어서 그룹처리하게 되는 것입니다.