집계함수
집계함수란? 개수를 세거나, 합계를 구하거나, 평균, 최대/최솟값 등을 구하는 함수.
STUDENT_ID STUDENT_NAME STUDENT_SCORE
-------------- -------------------- -------------
2017112 홍길순 350
2017113 김철수 400
2017114 김지연 420
netdream 계정에 들어가서 이전에 만든 school table을 다시 불러온다.
school table의 내용은 위와 같다.
count 함수: count 함수는 레코드의 갯수를 세주는 함수이다.
SQL> select count(student_id) from school;
student_id의 레코드가 몇개 있는지를 출력하라는 명령어
COUNT(STUDENT_ID)
-----------------
3
sum 함수는 합계를 구하는 함수이고, avg 함수는 평균을 구하는 함수이다.
SQL> select sum(student_score), avg(student_score) from school;
student_score의 합계와 평균을 출력하라는 명령어이다.
SUM(STUDENT_SCORE) AVG(STUDENT_SCORE)
------------------ ------------------
1170 390
max함수는 최댓값, min 함수는 최솟값을 출력하는 함수이다.
SQL> select max(student_score), min(student_score) from school;
student_score의 최댓값(420)과 최솟값(350)을 출력해준다.
MAX(STUDENT_SCORE) MIN(STUDENT_SCORE)
------------------ ------------------
420 350
그룹
그룹 명령어는 출력결과를 특정 그룹으로 묶어서 출력하고싶을 때 사용한다.
group by 명령어: group by 뒤에 attribute를 사용하여 해당 attribute로 그룹을 묶을 때 사용한다. 해당 명령어는 주로 집계함수와 같이 사용한다.
having 명령어; group by 명령어는 조건을 지정해주는 where과 사용이 불가능하다. 이럴 때는 having 명령어를 사용해서 출력을 해 줄 수 있다.
실습을 위해 이전에 계정을 unlock했던 scott 계정으로 접속한다.
scott 계정에는 기본으로 emp 테이블이 있으며 해당 테이블의 구조는 다음과 같다.
여기서 각 group by 명령어를 사용해 JOB의 종류를 group 지을 수 있다.
SQL> select job from emp group by job;
JOB을 그룹지어서 출력하라는 명렁이다. 결과로 밑에와 같이 JOB의 종류가 출력된다.
JOB
------------------
CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST
group by 명령어는 주로 집계함수와 같이 사용한다.
SQL> select job avg(sal) from emp group by job;
SAL attribute는 월급을 나타낸다. 이때 각 직업별 월급을 구하고 싶다면 위와 같이 입력해주면된다.
즉 job별로 묶어서 각 job별 평균 월급을 출력하라는 뜻이다.
JOB AVG(SAL)
------------------ ----------
CLERK 1016.66667
SALESMAN 1400
PRESIDENT 5000
MANAGER 2758.33333
ANALYST 3000
having문을 결합해 조건을 부여 하면 이런식으로도 출력이 가능하다.
SQL> select job, avg(sal) from emp group by job having avg(sal) >= 3000;
평균 월급이 3000 이상인 사람의 job과 평균 월급을 직업(job)별로 출력하라는 명령어이다.
JOB AVG(SAL)
------------------ ----------
PRESIDENT 5000
ANALYST 3000
정렬
정렬은 오름차순 혹은 내림차순으로 출력할 때 사용하는 명령어이다.
order by [attribute] asc는 오름차순으로 출력해주고
order by [attribute] desc는 내림차순으로 출력해준다.
SQL> select job, avg(sal) from emp group by job order by avg(sal) desc;
job과 평균 월급을 직업별로 평균 월급이 큰 순서대로(내림차순)으로 출력하라는 명령어이다.
JOB AVG(SAL)
------------------ ----------
PRESIDENT 5000
ANALYST 3000
MANAGER 2758.33333
SALESMAN 1400
CLERK 1016.66667
정렬은 때때로 rank over 함수와 같이 쓰이기도한다. rank 함수는 순위를 나타내는 함수이다.
SQL> select job, avg(sal), rank() over(order by avg(sal) desc) from emp group by job;
job과, 평균월급과 그에 따른 순위를 직업별로 출력하라는 명령어. 출력 시 정렬은 물론 순위까지 같이 출력해준다.
JOB AVG(SAL) RANK()OVER(ORDERBYAVG(SAL)DESC)
------------------ ---------- -------------------------------
PRESIDENT 5000 1
ANALYST 3000 2
MANAGER 2758.33333 3
SALESMAN 1400 4
CLERK 1016.66667 5
'프로그래밍 > 네트워크 프로그래밍' 카테고리의 다른 글
네트워크 프로그래밍-자바(db 연동, STMT, PSTMT) (0) | 2018.11.22 |
---|---|
네트워크 프로그래밍-DB(equi, non equi, inner) (0) | 2018.11.22 |
네트워크 프로그래밍-DB(함수, 조건문) (0) | 2018.09.21 |
네트워크 프로그래밍-DB(savepoint,column format,연산자,like, is null, rownum) (0) | 2018.09.15 |
네트워크 프로그래밍-DB(DDL, DML, DCL) (0) | 2018.09.14 |