[Oracle] Sql Developer 그룹함수

GyuriKim·2024년 5월 9일
0

Oracle DB

목록 보기
3/7
post-thumbnail
  • 2024.05.09 복습용

그룹함수


그룹함수는 테이블의 전체 데이터에서 통계적인 결과를 구하기 위해서 행 집합에 적용하여 하나의 결과를 생산한다.

구분설명
SUM그룹의 누적 합계 반환
AVG그룹의 평균 반환
COUNT그룹의 총 개수 반환
MAX그룹의 최대값 반환
MIN그룹의 최소값 반환

간단하게 아래와 같이 활용할 수 있다. 그룹함수는 NULL 값은 무시하고 계산한다. 테이블 데이터에 NULL값이 있어도 상관이 없다.

--round로 결과값 반올림
select sum(salary) as "급여총액", round(avg(salary)) as "급여 평균",
    max(salary) as "최대급여", min(salary) as "최소급여" from employee;

--null값은 무시    
select sum(commission) as "커미션총액" from employee;

--데이터 개수
select count(*) as "사원의 수" from employee;

--중복 제거
select count(distinct job) as "직업종류의 개수" from employee;

Group by


이 함수는 특정 컬럼을 기준으로 그룹별로 나눌때 사용한다. 아래와 같은 형식으로 사용한다.

select [컬럼명], 그룹함수 from [테이블명] 
	where 조건 group by [컬럼명];

예시_01

--부서별로 부서번호, 급여평균 출력
select dno as "부서번호", avg(salary) as "급여평균" 
	from employee group by dno;

예시_02

  • order by 뒤에 dno, job을 순서대로 쓰면 dno를 기준으로 먼저 정렬이 되고 그다음 job 기준으로 정렬이 된다. 출력된 테이블의 데이터를 보면 부서번호가 10, 20, 30으로 정렬이 되어있고 담당업무는 알파벳 순서로 정렬이 된 것을 확인할 수 있다.
--부서별 담당업무별로 직원수, 급여합계 출력
select dno as "부서번호", job as "담당업무", count(*) as "직원수", sum(salary) as "급여합계"
    from employee group by dno, job
    order by dno, job;

그룹 조건


그룹에도 조건을 걸어서 조회를 할 수 있다. having을 이용하면 되는데, having은 group by로 묶여진 데이터에 대해 필요한 데이터를 뽑는 구문이다. where은 from으로 불러들인 데이터에만 사용할 수 있으니 이 부분에서 차이가 있다.

--그룹 조건 : having
--부서별로 최대급여가 3000 이상인 부서출력
select dno as "부서번호", max(salary) as "최대급여" from employee 
    group by dno having max(salary) >= 3000;

연습_01


--1. 모든 사원의 급여 최고액, 최저액, 총급여, 평균급여 출력 - 평균 반올림, 별칭 사용
select max(salary) as "최고액", min(salary) as "최저액", 
        sum(salary) as "총급여", round(avg(salary)) as "평균급여" from employee;
--2. 부서별 인원이 4명보다 많은 부서의 부서번호, 인원수, 총급여 출력
select dno as "부서번호", count(*) as "직원수", sum(salary) as "총급여" from employee
    group by dno having count(*) > 4;

--3. 부서별로 담당업무가 동일한 사원의 수 출력, 부서기준으로 내림차순 정렬
select dno as "부서번호", job as "담당업무", count(*) as "직원수" from employee
    group by job, dno order by dno desc;

--4. 업무별 사원의 최저 급여 출력하되 관리자를 알 수 없는 사원과 최저급여가
--   2000 미만인 그룹은 제외하여 출력, 급여 기준으로 내림차순 정렬
select job as "담당업무", min(salary) as "최저 급여" from employee
    where manager is not null group by job having not min(salary) <2000 
    order by min(salary) desc;
--5. 각 부서에 대해 부서번호, 사원수, 부서내의 모든 사원의 평균 급여 출력,
--   부서 기준으로 내림차순 정렬
select dno as "부서번호", count(*) as "직원수", round(avg(salary)) as "급여평균" from employee
    group by dno order by dno desc;
profile
_〆(。。)

0개의 댓글