[ GROUP 함수의 종류 ]
- 그룹함수 ( 컬럼명)
- 데이터가 있는 항목의 건수만
- null 값은 안가져옴
1. COUNT
- 데이터가 있는 항목의 건수를 반환
- count(*) : null값을 포함한 모든 데이터의 총 건수
- count(column_name) : null값을 제외한 데이터가 존재하는 행 건수
2. SUM
- 입력된 데이터들의 합계값을 구하는 함수
3. AVG
- 입력된 값들의 평균값을 구해주는 함수
cf. median : 중간값
- avg(column_name) : null값을 제외한 데이터가 존재하는 건수의 평균값을 구한다.
4. MAX / MIN
- MAX : 주어진 데이터 중에서 가장 큰 값 (최대값)
- MIN : 주어진 데이터 중에서 가장 작은 값 (최소값)
* 시간 오래걸림 ( 정렬을 시키기 때문?)
* 최대값 / 최소값을 구할때는 인덱스 활용을 추천!
5. STDDEV / VARIANCE
- STDDEV : 주어진 데이터들의 표준편차
- VARIANCE : 주어진 데이터들의 분산
[ 특정 조건으로 세부적인 그룹화 하기 (group by) ]
1. GROUP BY
- 10g R1까지는 자동정렬, R2부터는 order by로 정렬해줘야함
- alias 사용 안됨
* GROUP BY절과 정렬(SORT)과의 관계
- Oracle 10g R1 버전까지는 GROUP BY 결과는 늘 Sort 되어서 출력되었다.
- 그러나 10g R2 버전부터 Hash 기반의 New in-Memory Sort Algorithm 방식으로 변경되면서
더 이상 정렬이 되지 않고 출력이 된다.
- 정렬이 되지 않기에 기존 방법보다 성능 향상이 많이 이루어 졌으나,
정렬을 원하는 경우 반드시 ORDER BY절을 함께 사용해야만 한다.
- 만약 GROUP BY 후 자동으로 정렬되었던 이전 방식으로 돌아가고 싶다면,
초기화 파라미터 파일 (pfile 이나 spfile)에 "_gby_hash_aggregation_enabled"=FALSE로 설정
- 그러나 전체적인 성능이 저하되므로 비추!
2. HAVING
- 그룹함수를 비교조건으로 사용할때
3. ROLLUP(컬럼명)
- 주어진 데이터들의 소계, 주어진 데이터들의 전체 총계를 구해줌
- 컬럼 하나씩 rollup해도 상관없음
* 각각 하나의 컬럼만 rollup한 화면
* rollup 더 확실히 알기
4. CUBE
- 각 소계도 출력, 전체 총계까지 출력(요약)
- 속도 느리지만, good
5. GROUPING SETS
- 그룹핑 조건이 여러개일 경우
- EX) student 테이블에서 학년별 인원수와 합계, 학과별 인원수와 합계를 구할때
6. LISTAGG
- 11g에서 추가됨
- 데이터들을 가로로 나열
- listagg(column_name) within group( "이곳에 아무조건도 주지 않으면 에러발생" )
7. PIVOT / UNPIVOT
- 11g에서 추가됨
- PIVOT : row 단위를 column 단위로 변경
- UNPIVOT : column 단위를 row 단위로 변경
- PIVOT 기능을 사용하지 않고 DECODE 함수를 활용하는 방법 -> 숙지필수
* PIVOT 을 사용하지 않고 DECODE 활용하는법
- decode를 이용해서 달력출력하기
- decode 이용해서 count 하기
8. LAG
- 이전 행 값을 가져올 때 사용하는 함수(한자리씩 미룰때)
9. LEAD
- LAG와 반대 (한자리씩 땡길때)
10. RANK
- 주어진 컬럼 값의 그룹에서 값의 순위 출력
[집계용 문법]
- RANK (조건값) WITHIN GROUP (order by 조건값 컬럼명)
[분석용 문법]
- RANK ( ) OVER (order by 컬럼명 [ASC|DESC])
- RANK ( ) OVER (partition by 컬럼명) : partition by 컬럼명 내에서 순위 출력
11. SUM ( ) OVER ( order by 컬럼명)
- 누계(누적값)
- SUM ( ) OVER (order by 컬럼명)
- RANK ( ) OVER (partition by 컬럼명) : partition by 컬럼명 내에서 누적값 출력
12. RATIO_TO_REPORT
- 비율구하는 함수
RATIO_TO_REPORT( 컬럼명 ) OVER( )
RATIO_TO_REPORT( 컬럼명 ) OVER(partition by 컬럼명)
- ROUND와 함께 사용
ROUND((RATIO_TO_REPORT( 컬럼명 ) OVER( ))*100, 2)
'oracle > [SQL] SQL' 카테고리의 다른 글
6장. DDL (0) | 2014.10.02 |
---|---|
5장. JOIN (0) | 2014.10.02 |
3장. 정규식함수 (0) | 2014.09.30 |
2장. 단일행 함수 (0) | 2014.09.29 |
1장. SELECT (0) | 2014.09.29 |
댓글