그룹함수
모든 그룹함수는 NULL 값을 빼고 계산한다!
그룹 함수에서 *를 사용하면 NULL 값을 포함하지만
칼럼명을 쓰면 해당 칼럼에 데이터가 있는 경우만, 즉, NULL 값은 제외하고 출력
1. COUNT
--> 입력되는 데이터들의 건수를 출력
문법: COUNT (*/칼럼명)
2. SUM
--> 입력되는 데이터들의 합계 값
문법: SUM (칼럼)
3. AVG
--> 평균값
문법: AVG (칼럼)
AVG 함수는 자동으로 NULL 값을 제외하기 때문에 답이 틀림
그래서 NVL 함수를 사용해서 NULL 값을 0으로 설정해 준 후 계산해야함
예를들어, AVG (NVL(bonus,0)) 이런식으로 써야지 오류가 없이 평균이 출력된
4. MAX / MIN
--> 입력되는 데이터들 중 최고 값 / 최저 값
문법: MAX / MIN (칼럼)
속도 저하, 시간이 오래 걸리는 함수
5. STDDEV / VARIANCE
--> 표준 편차 값 / 분산 값
문법: STDDEV / VARIANCE (칼럼)
6. GROUP BY
--> 특정 조건을 주고 더 세부적인 결과를 출력하고 싶을 때, ~ 별로 뭐를 출력해라 할때 씀
문법: GROUP BY 조건
FROM 절 다음에 쓰면 됨.
유의할 점!
1) SELECT 절에 사용된 그룹함수가 아닌 칼럼들은 GROUP BY 절에 다 적어줘야됨.
안그러면 not a GROUP BY expression 이라는 에러가 떠서 안됨! 이거 정말 조심, 나중에 까먹어서 이걸 잘 안지키게 되더라.
--> 이렇게 생각해도 될듯! select 절에 그냥 칼럼과 그룹함수가 있을 경우 무조건 group by를 마지막에 써줘야함.
당근 group by에는 그룹함수가 아닌 것을 써줘야 하고.
2) GROUP BY 절에는 반드시 칼럼명이 사용되어야 함 alias 별칭 사용하면 안됨.
7. HAVING
--> 그룹함수에서 WHERE 절을 써야할 때, WHERE 대신 HAVING 을 써야함!
즉, 그룹함수에서의 WHERE 라고 생각하면 됨
8. ROLLUP
--> 입력되는 데이터들의 소계 값을 자동으로 계산해서 출력
GROUP BY 절에 쓰는 함수
예를들어 ROLLUP (position) 이라고 할 때,
position들의 소계가 아니라, select절에서 position이 아닌 다른 칼럼들 내용들 하나하나의 소계가 나옴.
9. CUBE
--> 소계 및 전체 총계까지 자동 계산 후 출력
역시 GROUP BY 절에 쓰는 함수
속도 완전 느림, 전체값이 정말 필요할 때만 쓸 것.
10. GROUPING SETS
--> 그루핑 조건이 여러개일 경우, UNION 대신 더 간결하게 쓸 수 있는 함수
예를들어,
SELECT grade, count (*)
from student
GROUP BY (grade)
UNION
SELECT deptno1, count (*)
from student
GROUP BY (deptno1)
이런 쿼리를 이렇게 간단히 바꿀 수 있음;
SELECT grade, deptno1, count (*)
from student
GROUP BY GROUPING SETS (grade,deptno1)
11. LISTAGG
--> 11g 에서 추가된 함수, 그루핑한 후 결과를 가로로 보기 쉽게 출력
문법: LISTAGG (칼럼,'구분문자') WITHIN GROUP (ORDER BY '칼럼')
WITHIN GROUP( ) 안쓰면 에러 발생
12. RANK
-->순위 출력
집계용 문법: RANK (조건값) WITHIN GROUP (ORDER BY 조건값의 칼럼명)
--> 여기서 조건값에 아무것도 넣지 않으면 모든 값을 뜻함
분석용 문법: RANK ( ) OVER (PARTITION BY 그루핑할칼럼 ORDER BY 조건칼럼명)
RANK 함수 쓸 때 기본이 거꾸로 랭킹 되서 나옴 54321 이렇게
그래서 ORDER BY 절에 DESC 추가해주면 12345 오름차순으로 랭킹됨.
PARTITION BY 는 세부적인 그루핑 할 때 추가해주면 됨.
13. 누적합계
문법: SUM (칼럼명) OVER (PARTITION BY 그루핑할 칼럼 ORDER BY 칼럼명)
'SQL + PL/SQL > SQL' 카테고리의 다른 글
SUB QUERY - 서브쿼리 (0) | 2013.01.04 |
---|---|
JOIN (0) | 2013.01.04 |
SQL 단일 행 함수 - 문자함수 (0) | 2012.12.23 |
SQL - SELECT (0) | 2012.12.23 |
SQL (0) | 2012.12.19 |