본문 바로가기
카테고리 없음

윈도우 함수 (1)

by watergrace2u 2024. 8. 13.
반응형
SMALL

1. WHAT IS WINDOW FUNCTION??

 

IT IS...

- 서로 다른 행의 비교나 연산을 위해 만든 함수이다. 성능 좋다.

- GROUP BY 를 쓰지 않고 그룹 연산 가능!!! -> 데이터가 축소되지 않는다.

- LAG, LEAD, SUM, AVG, MIN, MAX, COUNT, RANK

 

2. GRAMMER

SELECT 윈도우함수([대상]) OVER ([PARTITION BY 컬럼] => 그룹연산 수행할 GROUP BY 컬럼

[ORDER BY 컬럼 ASC|DESC] => 어떤 순서로..?! RANK 의 경우 필수적이다. SUM, AVG, MIN, MAX, COUNT 등은 누적값 출력시 사용한다.

[ROWS|RANGE BETWEEN A AND B]) => 연산범위 설정, 이거 쓸 때 ORDER BY 절 필수!!

- PARTION BY, ORDER BY, ROWS|RANGE ... 순서 꼭 지켜야한다.

 

3. WHY NEED?!

전체를 출력하는 컬럼과 그룹함수 결과는 함께 출력할 수 없기 때문에!

(집계함수와 다른 열을 함께 사용할 때는 GROUP BY 절을 사용해야한다)

ex> SELECT EMPNO, ENAME, SAL, DEPTNO, SUM(SAL) FROM EMP; 오류난다.

 

4. EXAMPLE

ex1> 각 직원 정보와 함께 급여 총합 출력

ERROR SELECT EMPNO, ENAME, SAL, DEPTNO, SUM(SAL) FROM EMP;

SOLUTION1 서브쿼리 사용

SELECT EMPNO, ENAME, SAL, DEPTNO, (SELECT SUM(SAL) FROM EMP) AS TOTAL FROM EMP;

SOLUTION2 윈도우 함수 사용

SELECT EMPNO, ENAME, SAL, DEPTNO, SUM(SAL) OVER() AS TOTAL FROM EMP;

 

ex2> 각 직원 정보와 해당 직원이 속한 부서의 평균 급여 출력

SELECT EMPNO, ENAME, SAL, DEPTNO, AVG(SAL) OVER(PARTITION BY DEPTNO) AS AVG_SAL FROM EMP;

 

ex3> 각 직원 정보와 해당 직원이 속한 부서의 최대급여 출력

SELECT EMPNO, ENAME, SAL, DEPTNO, MAX(SAL) OVER(PARTITION BY DEPTNO) AS MAX_SAL FROM EMP;

 

 

반응형
LIST

댓글