티스토리 뷰

Database

[SQL] SQL 그룹 함수

쩨리쩨리 2018. 4. 18. 21:28
반응형

* 그룹 함수란 ?

테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수이고 복수행 함수라고도 한다.

그룹 함수의 종류에는 COUNT, MAX, MIN, SUM, AVG, STDDEV, VARIANCE 등이 있다.

 

 

 

 

* 그룹함수 규칙

1. 그룹함수는 NULL값이 있는 컬럼은 조회에 포함시키지 않는다.

2. LOW가 없는 테이블에 그룹함수 COUNT()를 사용 시 0이 출력되며 SUM()를 사용시 NULL 값이 출력된다.

3. COUNT, MAX 와 MIN은 문자, 숫자, 날짜 데이터 모두에게서 사용할 수 있다. 그러나 AVG SUM, VARIANCE, STDDEV는 NUMBER만 사용 가능하다.

4. EXPR이 있는 인수들의 자료 형태는 CHAR, VARCHAR2, NUMBER, DATE 형이 될 수도 있다.

 

 

 

 

 

* COUNT 함수

- 테이블에서 조건을 만족하는 행의 개수를 반환하는 함수이다.

COUNT(*), 숫자 >> NULL 값을 포함한 전체 행의 개수

COUNT(컬럼명) >> NULL 값을 제외한 전체 행의 개수

 

 

 

* MAX, MIN 함수

- MAX, MIN 함수를 데이터가 없는 테이블에 사용했을 때에는 NULL 값을 출력한다.

1. MAX 함수 : 지정한 컬럼 값들 중에서 최대값을 구하는 함수

2. MIN 함수 : 지정한 컬럼 값들 중에서 최소값을 구하는 함수

 

기본형 : SELECT MAX(컬럼명) FROM 테이블명;

SELECT MIN컬럼명) FROM 테이블명;

 

 

 

* SUM 함수

- 지정한 컬럼 값의 합계를 변환하는 함수로 해당 컬럼 값이 NULL인 것은 제외하고 계산한다.

 

기본형 : SELECT SUM(컬럼형) FROM 테이블명;

SLEECT SUM(DISTINCT 컬럼명) FROM 테이블명;

 

 

* AVG 함수

- 지정한 컬럼 값의 합계를 변환하는 함수로 해당 컬럼 값이 NULL인 것은 제외하고 계산한다.

 

기본형 : SELECT AVG(컬럼명) FROM 테이블명;

SELECT AVG(DISTINCT 컬럼명) FROM 테이블명;

 

 

* STDDEV 함수

- 지정한 컬럼의 표준편차를 구하는 함수로 분산 값의 제곱근이다.

 

기본형 : SELECT STDDEV(컬럼명) FROM 테이블명;

 

 

 

 

 

*  그룹 함수 예시

- 기본 형태 : 

조건절 Group by 컬럼명1, 컬럼명2 ... ;

- 각 컬럼들을 그룹으로 묶었을때, 컬럼안에 있는 값들 중 같은 것들끼리 묶어 그룹을 형성한다.

- 형성된 그룹들 끼리 묶어 정렬하거나 값을 추출할때 사용한다.

 

 

1. 테이블 생성

1
2
3
4
5
6
7
8
9
CREATE TABLE BIT5(
NAME VARCHAR2(20),   
TEAM VARCHAR(10),
JAVA_S NUMBER,      
CPP_S NUMBER,
WEB_S NUMBER,
DEP VARCHAR2(20)   
);
DESC BIT5;
cs

 

2. 값 입력

1
2
3
4
5
6
7
8
9
10
11
12
INSERT INTO BIT5 VALUES('천의령','1조',45,63,78,'비전공');
INSERT INTO BIT5 VALUES('김무준','1조',87,57,77,'비전공');
INSERT INTO BIT5 VALUES('방명광','1조',28,59,45,'컴공');
INSERT INTO BIT5 VALUES('조성규','1조',56,18,66,'비전공');
INSERT INTO BIT5 VALUES('서예슬','1조',28,64,81,'비전공');
INSERT INTO BIT5 VALUES('오정식','1조',NULL,23,09,'컴공');
INSERT INTO BIT5 VALUES('따거','2조',72,28,28,'컴공');
INSERT INTO BIT5 VALUES('김영민','2조',22,44,77,'컴공');
INSERT INTO BIT5 VALUES('','2조',77,77,56,'컴공');
INSERT INTO BIT5 VALUES('유호준','2조',65,45,91,'비전공');
INSERT INTO BIT5 VALUES('김기범','2조',78,63,31,'컴공');
INSERT INTO BIT5 VALUES('심준식','2조',54,30,81,'비전공');
cs

 

3. 그룹으로 나눠서 정렬 하기

- group by로 칼럼안에 같은 값들끼리 그룹을 만든다. 그룹은 원하는 값 끼리 묶어 조회하거나 값을 추출하여 연산을 할때 쓰인다.

- order by로 칼럼을 묶으면 어떤 칼럼을 중심으로 정렬할것인지 정하는 것이다.

1
2
3
4
SELECT TEAM, DEP,AVG(JAVA_s)
FROM BIT5 
GROUP BY TEAM,DEP 
ORDER BY DEP,TEAM;
cs

 

 

4. 그룹으로 나눠서 조건에 맞게 정렬하기

- Group by 칼럼명 HAVING 조건 을 쓰면 묶은 그룹을 조건에 맞게 다시 그룹화 할 수 있다.

1
2
3
4
5
SELECT TEAM, DEP,AVG(JAVA_s)
FROM BIT5 
GROUP BY TEAM,DEP 
HAVING AVG(JAVA_S)>50
ORDER BY DEP,TEAM;
cs

 

 

 

 

 

 

 

* ROLLUP 함수

- 추가적인 집계 정보를 보여주는 함수이다.

- ROLLUP 절에 명시할 수 있는 표현식에는 그룹핑 대상, SELECT 리스트에서 집계함수를 제외한 컬럼의 표현식이 올 수 있다. 명시한 표현식 수와 순서에 따라 레벨 별로 집계한 결과가 변환된다.

- ROLLUP 함수를 쓰지 않고 데이터를 나열할 경우 일일이 전부 조건들에 맞춰 나열해야 한다.

 

기본형 : SELECT 출력할 칼럼 FROM 테이블명 GROUP BY ROLLYP(그룹으로 묶을 것);

 

 

 

* CUBE 함수

- ROLLUP과 비슷하지만 개념이 다르다.

- ROLLUP은 레벨 별로 순차적 집계를 했다면 CUBE는 명시한 표현식 개수에 따라 가능한 모든 조합별로 집계한 결과를 반환한다.

 

기본형 : SELECT 출력할 칼럼, COUNT(*) AS COUNT FROM 테이블명 GROUP BY CUBE(그룹으로 묶을 것);

 

 

 

반응형
댓글
공지사항