집단 함수
: 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 그룹화하여 해당 그룹 별 통계 값을 출력하는 함수
(통계함수, 그룹함수라고도함)
-- select 절에만 사용가능 from/where 자리에 사용불가
SUM | 그룹의 합계 |
AVG | 그룹의 평균 |
COUNT | 그룹의 개수 |
MAX | 그룹의 최대값 |
MIN | 그룹의 최소값 |
STDEV | 그룹의 표준편차 |
VAR | 그룹의 분산으로 집단 함수 |
예) employee 테이블에서 전체 월급합계sum , 전체 월급평균avg, 전체 최대 월급 max, 전체 최소월급min,
전체 사원수count를 조회하라
select sum(salary) as '전체 월급합계',
avg(salary) as '전체 월급평균',
max(salary) as '전체 최대월급',
min(salary) as '전체 최소월급',
count(*)as '전체 사원수' -- 괄호안에 * 하면 null값 포함 전체 갯수/속성명을 주면 null값을 빼고
from employee ;
SUM예) 전체 월급 합계 구하기 (그룹별)
select sum(salary) as '전체 월급합계'
from employee
group by dno;
-- 이렇게 하면 그룹별로 합계가 나옴
AVG
예) 전체 직원 의 평균 봉급 을 구하기
select avg(salary) from employee ;
COUNT(*) 와 COUNT( 속성명 )
COUNT(*)
-- 테이블에서 조건을 만족하는 행의 개수를 반환하는 함수
-- *는 모든 속성들이란 의미
COUNT(속성명)
-- 속성값이 NULL이 아닌 속성값의 개수
COUNT(DISTINCT 속성명)
-- 속성값이NULL이 아니며 중복되지 않는 속성값들의 개수
-- SUM,AVG도 DISTINCT를 쓸 수 있음
-- MIN, MAX에서는 DISTINCT가 의미 없음
예) 사원테이블의 튜플수와 COMMISION의 개수 구하기
select count(*) as numrow, count(commission)
from employee;
예) 사원의 직급(job)의 수와 중복되지 않는 직급(job)의 수 구하기
select count(job)as numjob, count(distinct job) as numdistinctjob from employee ;
MAX / MIN
예) 사원의 최대 봉급 , 최소봉급 구하기
select max(salary) as maxsal, min(salary) as minsal
from employee;
Group by / Having
Group by
: 특정 속성을 기준으로 테이블 전체를 그룹으로 나누기 위한 절 부서별 사원의 평균 봉급
SELECT 컬럼 _ 리스트
FROM 테이블명
WHERE 조건
orderby
GROUP BY 컬럼 _ 리스트 (순서는 바뀔 수 없음 외워야함)
예)부서별 사원들의 평균 봉급 과 부서번호 검색 하기
select dno, avg(salary)as dnoavgsal from employee group by dno;
GROUP BY 사용 시 주의점
-- SELECT 절에는 집단 연산자나 GROUP BY 에 사용한 속성명만을 사용할 수 있음
-- 공통되는 속성값으로 그룹핑을 했으므로 , 각 그룹에서 개별 튜플을 접근할 수 없음
예) 부서별 사원들의 평균 봉급과 부서번호, 사원이름 검색하기 ( 오류 )
select dno, avg(salary) as dnoavgsal,ename from employee group by dno;
HAVING
-- 각 그룹에 대한 제약 조건을 기술할 때 사용함
-- HAVING 절은 GROUP BY 절의 종속절임
-- GROUP BY 없이 HAVING 은 나타날 수 없음
-- WHERE 절은 테이블 전체에 대한 제약 조건을 나타냄
예) 부서의 최대 봉급이 500 초과인 부서 에 대해서만 부서별 사원들의 평균 봉급과 부서 번호 출력 하기
select dno, avg(salary) as dnoavgsal from emplyee group by dno having max(salary)>500;
구문순서
select
from
where 그룹핑하기 전에 조건을 주는것
group by
having 그룹된 결과에 조건을 주는것 // group by 없이 having 절은 쓸 수 없음
order by
;
'Programming > SQL' 카테고리의 다른 글
[SQL] 인덱스 - 생성 / 삭제 / 종류 ( 고유 / 비고유 / 단일 / 결합 / DESCENDING / 집중 / 비집중 ) (0) | 2020.12.17 |
---|---|
[SQL/실습] 서브쿼리와 함수를 조합하여 문제풀기 (0) | 2020.12.17 |
[SQL] 집합연산자 - union / intersect / except / union all (0) | 2020.12.17 |
[SQL/실습] 트랜잭션의 활용 (0) | 2020.12.17 |
[SQL] 트랜잭션 제어문 (TCL) / 트랜잭션 모드 (0) | 2020.12.17 |