-
오라클의 그룹함수를 공부하려한다.
사용한 테이블은 아래 링크에 존재한다!
http://sqlfiddle.com/#!4/9b2918/1/0
SQL Fiddle | A tool for easy online testing and sharing of database problems and their solutions.
Query Panel Use this panel to try to solve the problem with other SQL statements (SELECTs, etc...). Results will be displayed below. Share your queries by copying and pasting the URL that is generated after each run.
sqlfiddle.com
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