본문 바로가기

SQL + PL/SQL/SQL

SQL 그룹함수



그룹함수


모든 그룹함수는 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