-
오라클의 그룹함수를 공부하려한다.
사용한 테이블은 아래 링크에 존재한다!
http://sqlfiddle.com/#!4/9b2918/1/0
0. 기본 테이블 생성
아래처럼 그냥 기본적인 Table을 하나 생성하고..
1. GROUP BY
너무나도 기본적인 함수이다.
SELECT 게시글ID , 월 , SUM(조회수) AS 전체조회수 FROM 위지원의포스팅 GROUP BY 게시글ID , 월;
2. ROULLUP
SELECT 게시글ID , 월 , SUM(조회수) AS 전체조회수 FROM 위지원의포스팅 GROUP BY ROLLUP(게시글ID, 월);
GROUP BY 와 다르게 null과 함께 총계가나온다.
GROUP BY 파라미터 값의 순서에 따라서 쿼리 결과는 달라진다.
3. CUBE
SELECT 게시글ID , 월 , SUM(조회수) AS 전체조회수 FROM 위지원의포스팅 GROUP BY CUBE(월, 게시글ID);
CUBE 함수는 모든 경우의 수에 대해 소계와 총계를 출력한다. GROUP BY 파라미터 값의 순서에 따라서 쿼리 결과는 달라지지 않는다.
아래보면 월별 소계가 추가된 것을 알 수 있다.
4. GROUPING SETS
SELECT 게시글ID , 월 , SUM(조회수) AS 전체조회수 FROM 위지원의포스팅 GROUP BY GROUPING SETS(월, 게시글ID);
ROLLUP, CUBE와 달리 계층 결과가 아니고 GROUP BY 파라미터 값의 순서에 따라서 쿼리 결과는 달라지지 않는다.
5. GROUPING
이 함수를 쓰기에 앞서 하나 알게된 사실은,, GROUPING() 안에 들어가는 컬럼은 CHAR 형태여야한다는 것이다.
그래서 테이블 생성을 아래처럼 변경했다.
CREATE TABLE 위지원의포스팅 ( 게시글ID VARCHAR2(10), 월 VARCHAR2(10), 카테고리 VARCHAR2(10), 조회수 INTEGER ); INSERT INTO 위지원의포스팅 VALUES ('p1', '2022-05', '개발', 140); INSERT INTO 위지원의포스팅 VALUES ('p1', '2022-06', '개발', 440); INSERT INTO 위지원의포스팅 VALUES ('p2', '2022-05', '에러', 240); INSERT INTO 위지원의포스팅 VALUES ('p2', '2022-07', '에러', 140); INSERT INTO 위지원의포스팅 VALUES ('p3', '2022-05', '기타', 340);
SELECT CASE GROUPING(게시글ID) WHEN 1 THEN '모든게시글ID' ELSE 게시글ID END 게시글ID , CASE GROUPING(월) WHEN 1 THEN '모든월' ELSE 월 END 월 , SUM(조회수) 조회수 FROM 위지원의포스팅 GROUP BY ROLLUP(게시글ID, 월); # 위에 ROLLUP 함수는 CUBE, GROUPING SETS 로 바꿔서 사용이 가능하다
그럼 아래와 같은 결과를 얻을 수 있다.
이 쿼리에서 WHEN 1 THEN '모든~' 이 집계를 담당하는 부분이다! 😊
'2022년 > Developement' 카테고리의 다른 글
Nifi 설치 및 실행, 예제 및 kafka, hdfs연결해보기 (0) 2022.08.09 Apache Nifi란? (0) 2022.08.08 오라클 계층형 쿼리 (0) 2022.07.11 Object Detction model (2) 2022.05.31 docker elk 더 좋은 repo를 찾아내다! (0) 2022.04.15