MySQL 살펴보기_2

호근·2022년 12월 21일
0

Mysql

목록 보기
2/2

order by

select문에서 result set을 정렬하기 위해 사용하는 구문이다.

select 문의 가장 마지막에 작성하며,
실행순서도 가장 마지막이다.


select문의 실행순서

from -> where -> group by -> having -> select - order by


asc와 desc

asc
오름차순

desc
내림차순

만약 컬럼에 null이 존재한다면 default로 상단에 배치

# 사원들의 이름, 급여 보너스를 조회하되 bonus로 오름차순 정렬

select emp_name, salary, bonus, SAL_LEVEL, DEPT_CODE
from employee
# order by bonus asc; 

group by

특정 컬럼을 기준으로 그루핑하여 그룹함수를 사용해 원하는 데이터를 추출할 목적으로 사용한다.

group 함수

  • sum()
  • count()
  • avg()
  • max()
  • min()

select 절에는 그루핑한 기준이되는 컬럼과 그 외 함수의 결과만 올 수 있다.

# 부서별 급여의 총액과 평균 급여를 보자
select dept_code, sum(salary), avg(salary)
from employee
group by DEPT_CODE;


# 부서의 평균급여가 3000000이상인 부서를 조회
select dept_code
from employee
# where avg(SALARY) >= 3000000 : where절이 돌아가는 시점에는 그루핑이 안되어있음
# 개별 탐색을 마친후에 그루핑을 해야한다.
# 때문에 where절에서는 그루핑함수를 못쓴다.

group by DEPT_CODE
having sum(SALARY) >= 3000000;

집계함수 (rollup)

with rollup

그룹별 중간집계와 총집계를 계산한다.

#부서별, 직급별, 연봉레벨별
select dept_code, job_code, SAL_LEVEL, sum(salary), count(*)
from employee
where DEPT_CODE is not null
group by DEPT_CODE, JOB_CODE, SAL_LEVEL with rollup
order by dept_code is null asc
,job_code is null asc
,sal_level is null asc
, dept_code asc
, job_code asc
, sal_level asc;

result set에는 각 부서(그룹)별 합이 출력된다.

다만, 데이터의 양이 많으면 그룹별로 집계된 값에대한 가독성이 현저히 떨어진다.

이런상황을 타개하려면 grouping 함수를 사용하면 된다.

grouping 함수

grouping (Columns_name)

해당 row의 집계값이 인자로 전달받은 columns set의 산출물이면 0,
아니면 1을 갖는다.

내가 보고있는 그룹이 어디에 그루핑된건지 알아야할 때 쓴다.

select dept_code, job_code, SAL_LEVEL, sum(salary), count(*)
	,grouping(dept_code)
    ,grouping(job_code)
    ,grouping(SAL_LEVEL)
from employee
where DEPT_CODE is not null
group by DEPT_CODE, JOB_CODE, SAL_LEVEL with rollup
order by dept_code is null asc
,job_code is null asc
,sal_level is null asc
, dept_code asc
, job_code asc
, sal_level asc;
profile
22.11.28 ~

0개의 댓글