반응형
MYSQL에는 SUM, MAX, MIN, AVG, COUNT 등 다양한 집계함수가 있습니다. MYSQL 8 버전에서는 이런 집계함수와 윈도우함수를 함께 사용하여 더 쉽고 편리하게 합계, 최대값, 최소값 등을 구할 수 있기 때문에 다양한 예제와 함께 알아보도록 하겠습니다.
기본 문법
윈도우함수 OVER는 GROUP BY와 비슷한 역할을 하지만 조회된 기존 데이터에 추가로 집계한 값을 보여준다는 점에서 더 효율적일 수 있습니다.
- SLELECT 집계함수(컬럼) OVER(PARTITION BY 그룹컬럼 ORDER BY 순서컬럼)
1. 집계함수
MAX() : 최대값, MIN : 최소값, SUM() : 합계, AVG : 평균, COUNT() : 개수
1) 그룹별 최대값 조회
SELECT ID, NAME, DEPT, SALARY, MAX(SALARY) OVER(PARTITION BY DEPT) FROM SALARY;
2) 그룹별 중복 항목 개수 조회
SELECT ID, NAME, DEPT, SALARY, COUNT(SALARY) OVER(PARTITION BY DEPT) FROM SALARY;
3) 그룹별 합계
SELECT ID, NAME, DEPT, SALARY, SUM(SALARY) OVER(PARTITION BY DEPT) FROM SALARY;
4) 그룹별 누적 합계
SELECT ID, NAME, DEPT, SALARY, SUM(SALARY) OVER(PARTITION BY DEPT ORDER BY SALARY) FROM SALARY;
2. 윈도우함수와 GROUP BY 비교
위에서 설명드린 것처럼 윈도우함수는 기존의 결과에 GROUP BY와 ORDER BY 결과 컬럼을 추가로 조회할 수 있기 때문에 쿼리를 한 번만 사용하고도 RAW DATA와 결과를 한 번에 볼 수 있다는 장점이 있습니다.
# RAW DATA 조회
SELECT ID, NAME, DEPT, SALARY FROM SALARY;
# 그룹별 합계 조회
SELECT DEPT, SUM(SALARY) FROM SALARY GROUP BY DEPT;
위의 쿼리를 조회한 결과를 보면 각각의 쿼리를 조회해야만 전체 데이터와 그룹별 합계를 조회할 수 있지만, 앞서 살펴보았던 SUM() OVER() 윈도우함수를 사용하면 각각의 결과를 한 번에 볼 수 있다는 걸 확인할 수 있었습니다.
반응형
'IT > MYSQL' 카테고리의 다른 글
MYSQL - NULL 처리하기 3가지 방법(IFNULL, CASE, COALESCE) (0) | 2023.02.27 |
---|---|
MYSQL - ROLLUP 함수로 소계, 합계 한 번에 조회하기 (0) | 2023.02.26 |
MYSQL - RANK / DENSE_RANK / ROW_NUMBER 함수로 순위 쉽게 구하기 (0) | 2023.02.24 |
MYSQL - 테이블 외래키(FOREIGN KEY) 추가, 삭제, 확인하기 (0) | 2023.02.23 |
MYSQL - 테이블 수정하기 ALTER TABLE (0) | 2023.02.20 |
댓글