SELECT (SELECT MAX(sal) FROM emp) AS MAX
,(SELECT MIN(sal) FROM emp) AS MIN
,(SELECT AVG(sal) FROM emp) AS AVG
,(SELECT SUM(sal) FROM emp) AS SUM
FROM dual;
-- 위는 극단적인 대조를 위한 예시
SELECT DISTINCT MAX(sal) OVER() AS MAX
, MIN(sal) OVER() AS MIN
, AVG(sal) OVER() AS AVG
, SUM(sal) OVER() AS SUM
FROM EMP;
결과는 같다. 다만 결과를 산출하는 방식에 차이가 있다.
윈도우 함수는 한 번 참조한 테이블을 버퍼로 활용한다.
SELECT DISTINCT DEPTNO
, MAX(sal) OVER(PARTITION BY DEPTNO) AS MAX
, MIN(sal) OVER(PARTITION BY DEPTNO) AS MIN
, AVG(sal) OVER(PARTITION BY DEPTNO) AS AVG
, SUM(sal) OVER(PARTITION BY DEPTNO) AS SUM
FROM EMP;
SELECT DEPTNO
,MAX(SAL) AS MAX
,MIN(SAL) AS MIN
,AVG(SAL) AS AVG
,SUM(SAL) AS SUM
FROM EMP
GROUP BY DEPTNO;
GROUP BY 사용 시 해당 절에 열거된 컬럼만 사용이 가능하다.
이런 제약에서 자유롭기 때문에 좀 더 유연하게 결과를 도출할 수 있다.
'개발 > 오라클 SQL' 카테고리의 다른 글
지정 요일 주차 구하기 (1) | 2023.02.01 |
---|---|
집계 함수 사용 시 주의사항 (0) | 2023.01.15 |
컬럼 <=> 행 변환 (0) | 2023.01.13 |
숫자 함수 응용 (0) | 2023.01.10 |
자주 쓰는 함수 모음 (1) | 2023.01.07 |