09. 통계함수
유튜버 쉬운코드 님의 데이터베이스 강의를 정리한 내용
# 정렬
# ORDER BY
ORDER BY : 조회 결과를 특정 attribute(s) 기준으로 정렬하여 가져올 때 사용
- default 정렬 방식은 오름차순
- 오름차순 정렬은 ASC
- 내림차순 정렬은 DESC
ex) 임직원들의 정보를 연봉 순서대로 정렬해서 알고싶음 - 오름차순
ex) 임직원들의 정보를 연봉 순서대로 정렬해서 알고싶음 - 내림차순
ex) 임직원들의 정보를 같은 부서 안에서 연봉 순서대로 정렬해서 알고싶음
- 앞에 적힌
dept_id
로 먼저 정렬- MySQL에서는 NULL을 가장 작게 인식해서 먼저 나옴
- 부서 내에서 연봉 순서대로 정렬됨
# 집계
집계 함수 (Aggregate function) : 여러 tuple 들의 정보를 요약해서 하나의 값으로 추출하는 함수
- 대표적으로 COUNT, SUM, MAX, MIN, AVG 함수
- (주로) 관심있는 attribute에 사용
- ex)
AVG(salary)
,MAX(birth_date)
- ex)
- NULL 값들을 제외하고 요약 값 추출
# COUNT
COUNT로 수를 셀 때는 애스터리스크(*
)를 사용하는 것을 추천
ex) 임직원의 수를 알고싶음
- 애스터리스크(
*
)는 튜플의 수를 의미
ex) 포지션을 가지는 임직원의 수를 알고싶음
- 결과가 위와 동일한 것을 볼 수 있음
- attribute의 값에 중복이 있다고 하더라도 중복을 포함해서 COUNT함
ex) 부서를 가지는 임직원의 수를 알고싶음
- NULL을 제외하고 중복을 포함하여 나머지 COUNT
ex) 프로젝트 2002에 참여한 임직원의 수와 최대 연봉과 최소 연봉과 평균 연봉을 알고싶음
works_on
테이블은 누가 어떤 프로젝트에 참여했는지에 대한 정보가 있으니까 참조해야함employee
테이블은 연봉 정보가 있으니까 참조해야함
# 그룹
# GROUP BY
GROUP BY : 관심있는 attribute(s) 기준으로 그룹을 나눠서 그룹별로 aggregate function을 적용하고 싶을 때 사용
- grouping attribute(s) : 그룹을 나누는 기준이 되는 attribute(s)
- grouping attribute(s)에 NULL 값이 있을 때는 NULL 값을 가지는 tuple끼리 묶임
- 그룹을 기준으로 했으면 SELECT에 그 그룹 가져와야지 !
ex) 각 프로젝트에 참여한 임직원의 수와 최대 연봉과 최소 연봉과 평균 연봉을 알고싶음
# HAVING
HAVING : aggregate function의 결과값을 바탕으로 그룹을 필터링하고 싶을 때 사용
- GROUP BY와 함께 사용
- HAVING 절에 명시된 조건을 만족하는 그룹만 결과에 포함됨
ex) 프로젝트 참여 인원이 7명 이상인 프로젝트들에 대하여 각 프로젝트에 참여한 임직원의 수와 최대 연봉과 최소 연봉과 평균 연봉을 알고싶음
# 예제
ex) 각 부서별 인원 수를 인원 수가 많은 순서대로 정렬해서 알고싶음
ex) 각 부서별 - 성별 인원 수를 인원 수가 많은 순서대로 정렬해서 알고싶음
ex) 회사 전체 평균 연봉보다 평균 연봉이 적은 부서들의 평균 연봉을 알고싶음
ex) 각 프로젝트 별로 프로젝트에 참여한 90년대생들의 수와 이들의 평균 연봉을 알고싶음
ROUND()
는 소숫점 이하 반올림
- 이 결과를
proj_id
기준으로 정렬한 것
ex) 프로젝트 참여 인원이 7명 이상인 프로젝트에 한정해서 각 프로젝트 별로 프로젝트에 참여한 90년대생들의 수와 이들의 평균을 알고싶음
- 내가 걸어주려는 조건이 어떤 조건인지에 따라 WHERE 절에 명시할건지, HAVING절에 조건을 명시할 건지 파악해야함
만약 위 예제에서 HAVING절에 조건을 걸었다면?
- HAVING절에 사용된 COUNT는 그룹핑을 한 뒤에 그 그룹에 대해 카운트를 한 값이다.
- 이 COUNT의 의미는 각 부서별로 90년대생에 대한 카운트이다.
- 각 부서별 90년대 생에 대한 참여를 카운트 한 것
# SELECT 최종 정리
SELECT 조회 요약
|
|
SELECT 개념적인 실행 순서
- select 쿼리에서 각 절(phase)의 실행 순서는 개념적인 순서이다.
- select 쿼리의 실제 실행 순서는 각 RDBMS에서 어떻게 구현했는지에 따라 다름
- FROM : 어떤 테이블로부터 조회할 것인지 혹은 join이 된 테이블들
- WHERE : 가지고 오는 튜플들에 대해서 조건을 통해 필터링 해야한다면
- GROUP BY : 그룹핑을 하고싶다면
- HAVING : 그룹핑 이후 특정 그룹만 필터링 해서 가지고 오고싶다면
- ORDER BY : 최종적인 select로 가져오기 직전에 정렬해서 가져오고싶다면
- SELECT : 관심있는 속성이나 통계에 관하여 최종적인 조회