집계함수, 그룹함수, 다중행 함수
- 인수(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;