본문 바로가기

Study/Book

[SQL 쿡북] Chapter 7 : 숫자 작업 (MYSQL)

반응형

7.1 평균 계산하기 

모든 사원의 평균 급여와 각 부서의 평균 급여를 찾으려고 한다.

select avg(sal) as avg_sal
	from emp

NULL이 아닌 급여에 대한 평균이 계산된다.  급여가 NULL값 이면 나누는 수에 포함하지 않는다는 뜻이다.

select deptno, avg(sal) as avg_sal
	from emp
group by deptno

각 부서의 평균 급여를 계산하려면 GROUP BY를 사용하여 그룹을 생성한다. 

 

7.2 열에서 최댓값, 최솟값 찾기

전 사원에 대하여 최고 임금과 최저 임금 및, 각 부서에서의 최고 임금과 최저 임금을 찾으려고 한다. 

MIN과 MAX 함수를 사용하면 되고, 원리는 위와 비슷하다. 

select min(sal) as min_sal, max(sal) as max_sal
	from emp

select deptno, min(sal) as min_sal, max(sal) as max_sal
	from emp
 group by deptno

 

7.3 열의 값 집계하기 

모든 값의 합계를 열에서 계산하려고 한다. 즉 하나의 열에 대한 모든 값을 더하는 것을 예로 들 수 있다. ex) 모든 사원의 급여

select sum(sal)
	from emp

부서별 사원 급여를 합산하면 다음과 같다. 

select deptno, sum(sal) as total_for_dept
	from emp
 group by deptno

 

7.4 테이블 행 수 계산하기 

행 수를 세거나 열의 값 수를 세어보려고 한다. 예를 들어 총 사원 수와 각 부서의 사원 수를 찾으려고 한다. 

select count(*)
	from emp

select deptno, count(*)
	from emp
 group by deptno

 

7.5 열의 값 세어보기 

열에 있는 NULL 값이 아닌 수를 세어보려고 한다. 예를 들어 얼마나 많은 사원이 커미션을 받고 있는지 확인해보려 한다. 

select count(comm)
	from emp

 

7.6 누계 생성하기 

열에 있는 값의 누계를 계산하려고 한다. SUM OVER를 사용하면 간단하계 누계를 생성할 수 있다. 

select ename, sal,
	   sum(sal) over (order by sal, empno) as running_total
	from emp
    order by 2

OVER절을 사용하면 ORDER BY절의 컬럼 순서로 누적 합계가 표시되며, 결과도 해당 컬럼으로 정렬된다. 여기서 empno 열은 누계에서 중복값을 방지하기 위해 포함한다. 넣지 않으면, 만약에 급여가 같은 사람이 있으면 두 급여를 합하여 누적이 된다. 그래서 중복되지 않는 열 조합을 지정하여 누계가 바르게 진행될 수 있게 해야 한다. 

 

7.7 누적곱 생성하기 

select empno, ename, sal,
	exp(sum(ln(sal))over(order by sal, empno)) as running_prod
  from emp
 where deptno = 10

1. 각각의 자연로그를 계산한다.(LN)

2. 로그를 합산한다.

3. 결과를 상수 e의 거듭제곱으로 올린다. (EXP)

 

7.9 최빈값 계산하기 

최빈값(주에진 데이터에서 가장 자주 나타나는 요소)를 찾고 싶다. 예를 들어 deptno 20에서 급여 최빈값을 찾으려고 한다. 기준 급여는 다음과 같다. 

select sal
	from emp
  where deptno = 20
  order by sal

DENSE_RANK를 사용하여 급여 횟수의 순위를 매겨 쉽게 최빈값을 추출할 수 있다. 

select sal
	from (
  select sal,
		 dense_rank()over( order by cnt desc) as rnk
	from(
  select sal, count(*) as cnt
	from emp
   where deptno = 20
   group by sal
		) x
		) y
   where rnk = 1

 

반응형