[SQL] 03.집계함수 01. 집계함수 (230904)

0

집계(Aggregation) 함수와 GROUP BY, HAVING

집계함수, 그룹함수, 다중행 함수

  • 인수(argument)는 컬럼.
    • sum(): 전체합계
    • avg(): 평균
    • min(): 최소값
    • max(): 최대값
    • stddev(): 표준편차
    • variance(): 분산
    • count(): 개수
      - 인수:
      - 컬럼명: null을 제외한 값들의 개수.
      - *: 총 행수 - null과 관계 없이 센다.
    • count(distinct 컬럼명): 고유값의 개수.
  • count(*) 를 제외한 모든 집계함수들은 null을 제외하고 집계한다.
    - (avg, stddev, variance는 주의)
    -avg(), variance(), stddev()은 전체 개수가 아니라 null을 제외한 값들의 평균, 분산, 표준편차값이 된다.=>avg(ifnull(컬럼, 0))
  • 문자타입/일시타입: max(), min(), count()에만 사용가능
    - 문자열 컬럼의 max(): 사전식 배열에서 가장 마지막 문자열, min()은 첫번째 문자열.
    - 일시타입 컬럼은 오래된 값일 수록 작은 값이다.

편차 : 값이 평균으로부터 얼마나 떨어져있는지.
평균 : 10, value : '5'
표준편차 : 편차들의 평균
분산 : 표준편차의 제곱

-- EMP 테이블에서 급여(salary)의 총합계, 평균, 최소값, 최대값, 표준편차, 분산, 총직원수를 조회 
select sum(salary),
	   avg(salary),
       min(salary),
       max(salary),
       stddev(salary),
       variance(salary),
       count(*),
       count(emp_id)
from emp;

-- count(컬럼명) 그 컬럼에서 데이터개수(null이 아닌 값들)
select count(comm_pct) from emp;
select avg(comm_pct),  -- null을 뺀 평균, 커미션을 받는 사람들 기준 평균.
	   avg(ifnull(comm_pct, 0)) -- 전체 직원 기준 평균.
from emp;
-- EMP 테이블에서 가장 최근 입사일(hire_date)과 가장 오래된 입사일을 조회
select max(hire_date), 
	   min(hire_date)
from emp;       
-- EMP 테이블의 부서(dept_name) 의 개수를 조회
select count(dept_name)
from emp;
-- EMP 테이블에서 job 종류의 개수 조회
select count(distinct job)
from emp;
-- TODO:  커미션 비율(comm_pct)이 있는 직원의 수를 조회
select count(comm_pct)
from emp;
select comm_pct from emp;
-- TODO: 커미션 비율(comm_pct)이 없는 직원의 수를 조회
select count(*) - count(comm_pct) as '커미션 비율이 없는 직원의 수'
from emp;
select count(*) from emp where comm_pct is null;


-- TODO: 가장 큰 커미션비율(comm_pct)과 과 가장 적은 커미션비율을 조회
select max(comm_pct),
	   min(comm_pct)
from emp;	
-- TODO:  커미션 비율(comm_pct)의 평균을 조회. 소수점 이하 2자리까지 출력
select round(avg(comm_pct), 2)
from emp;
-- TODO: 직원 이름(emp_name) 중 사전식으로 정렬할때 가장 나중에 위치할 이름을 조회.
select max(emp_name)
from emp;
-- TODO: 급여(salary)에서 최고 급여액과 최저 급여액의 차액을 출력
select max(salary) - min(salary) 차액
from emp;
-- TODO: 가장 긴 이름(emp_name)이 몇글자 인지 조회.
select max(char_length((emp_name))) from emp;
select emp_name from emp;
-- TODO: EMP 테이블의 업무(job) 종류가 몇개 있는 조회. 고유값들의 개수
select count(distinct(job)) from emp;
select job from emp;
-- TODO: EMP 테이블의 부서(dept_name)가 몇종류가 있는지 조회. 고유값들의 개수
select count(distinct(dept_name)) -- null 빼고 계산 -> null은 범주값(고유값)에 포함 안됨
	   , count(distinct ifnull(dept_name, "미배치")) -- null을 포함해서 계산, null이 범주값에 포함된 경우
from emp; 
select distinct ifnull(dept_name, "미배치") from emp;
profile
데이터 분석 & 서비스 기획

0개의 댓글

관련 채용 정보