티스토리 뷰
* 그룹 함수란 ?
테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수이고 복수행 함수라고도 한다.
그룹 함수의 종류에는 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(그룹으로 묶을 것);
'Database' 카테고리의 다른 글
[SQL] DDL, 테이블 생성, 복사, 변경, 삭제 (0) | 2018.04.19 |
---|---|
[SQL] 제약조건 확인하기 (딕셔너리 활용) (1) | 2018.04.19 |
[SQL] DB와 SQL, SQLPLUS (0) | 2018.04.18 |
[SQL] cmd를 이용한 테이블 생성하기 (0) | 2018.04.17 |
[SQL] SQLDeveloper 글꼴 크기 변경 (1) | 2018.04.13 |