728x90
📕 2과목 - SQL 기본 및 활용
📌 2장 - SQL 활용
📍 GROUPING , ROLLUP, CUBE ( 105~ 111 )
- ROLLUP
- 합계, 소계를 구하는 함수
- GROUP BY ROLLUP( A.서비스ID, B.가입일자 )
- 1. 서비스아이디, 가입일자로 GROUP BY 함
- 2. 소계를 구한 다음, ROLLUP 으로 합계를 알려준다.
- GROUPING
- ROLLUP 으로 인해 생성된 값들
- 원래 있던 던 값들 : 0
- ROLLUP으로 인해 생긴 GROUPNG 값들 : 1
📍 GROUPING SET ( Q.111 )
- 주어진 컬럼을 하나씩 GROUP BY 를 한 후에 UNION ALL 한 것과 같다.
- SELECT 상품ID, 월, SUM(매출액) AS 매출액 FROM 월별매출 GROUP BY GROUPING SETS (상품ID, 월);
- SELECT 상품ID, NULL AS "월", SUM(매출액) AS 매출액 FROM 월별매출 GROUP BY (상품ID)
- UNION ALL
- SELECT NULL AS "상품ID", 월, SUM(매출액) AS 매출액 FROM 월별매출 GROUP BY (월);
- SELECT 상품ID, 월, SUM(매출액) AS 매출액 FROM 월별매출 GROUP BY GROUPING SETS ( (상품ID, 월) );
- 상품ID 와 월 을 한 번 더 괄호로 싸줬음.
- 그렇게 되면, GROUP BY 상품ID, 월 인 것 과 같음.
- SELECT 상품ID, 월, SUM(매출액) AS 매출액 FROM 월별매출 GROUP BY (상품ID, 월) ; 와 같음.
📍 CUBE, GROUPING SET, ROLLUP 에 대한 설명 ?
- 세가지 그룹 함수 모두 일반 그룹 함수로 동일한 결과를 추출할 수 있음.
- 함수의 인자로 주어진 컬럼의 순서에 따라 다른 결과를 추출하게 되는 그룹함수
- ROLLUP
- 나열된 컬럼에 대해 계층 구조로 집계를 출력함.
- CUBE, ROLLUP, GROUPING SETS 함수들에 의해 집계된 레코드에서 집계 대상 컬럼 이외의 GROUP 대상 컬럼의 값은 NULL을 반환 함.
- CUBE 그룹 함수
- 인자로 주어진 컬럼의 결합 가능한 모든 조합에 대해서 집계를 수행하므로 다른 그룹 함수에 비해 시스템에 대한 부하가 큼.
- 즉, GROUPING COLUMNS 이 가질 수 있는 모든 경우에 대해서 Subtotal을 생성해야 하는 경우에는 CUBE 를 사용하는 것이 바람직하나, 많은 부하를 일으키기 때문에 사용에 유의해야 함.
- 결합 가능한 모든 값에 대해서 다차원 집계를 생성함.
- CUBE도 결과에 대한 정렬이 필요한 경우는 ORDER BY 절에 명시적으로 정렬 칼럼이 표시 되어야 함.
- 인자로 주어진 컬럼의 결합 가능한 모든 조합에 대해서 집계를 수행하므로 다른 그룹 함수에 비해 시스템에 대한 부하가 큼.
+) 2023.03.17 추가.
📍 ROLLUP, CUBE, GROUPING SETS ?
- GROUP BY 와 함께 사용 하며, 소계를 구할 때 쓸 수 있음.
📍 ROLLUP ? ( SQL전문가 정미나 - ROLLOP 함수 )
- ROLLUP에 인자로 들어온 값을 오른쪽부터 그룹을 만들어서 합계를 낸다고 생각하면 됨.
- GROUP BY ROLLUP ( COL1, COL2, COL3 )
- 결과 1 : COL1, COL2, COL3
- 결과 2 : COL1, COL2
- 결과 3 : COL1
- 결과 4 : () --> 전체합계
- GROUP BY ROLLUP ( COL1, (COL2, COL3) )
- 결과 1 : COL1, (COL2, COL3)
- 결과 2 : COL1
- 결과 3 : () --> 전체합계
- GROUP BY COL1, ROLLUP ( (COL2, COL3) )
- 결과 1 : COL1, (COL2, COL3)
- 결과 2 : COL1
- 컬럼의 순서가 수행결과에 영향을 미침.
📍 CUBE ? ( SQL전문가 정미나 - CUBE 함수 )
- 모든 경우의 수가 전부 나옴.
- GROUP BY ROLLUP ( COL1, COL2 )
- 결과 1 : COL1, COL2
- 결과 2 : COL1
- 결과 3 : COL2
- 결과 4 : () --> 전체합계
- GROUP BY ROLLUP ( COL1 )
- 결과 1 : COL1
- 결과 2 : () --> 전체합계
- 컬럼의 순서가 수행결과에 영향 안 줌.
📍 GROUPING SETS ?
- 원하는 컬럼만 지정해서 소계를 구함.
- UNION ALL과 결과가 동일함.
- GROUP BY GROUPING SETS ( COL1, COL2 )
- 결과 1 : COL1
- 결과 2 : COL2
- GROUP BY GROUPING SETS ( (COL1, COL2), COL2 , () )
- 결과 1 : (COL1, COL2)
- 결과 2 : COL2
- 결과 3 : ()
- 괄호를 기준으로 먼저 실행 됨.
📍 GROUPING ?
- ROLLUP, CUBE, GROUPING SETS 함수랑 함계 쓰이며,
GROUP BY 에서 쓰인 소계 함수 결과 CASE 에서 빠진
컬럼에 대해 1 을 반환함.
출처 : https://www.youtube.com/watch?v=bOKLYBZNn_Y
https://www.youtube.com/watch?v=cy9Xiim1X94&list=PLyQR2NzLKOCaU8EZnKIIuJsZDM0xVUZ6r&index=44&t=614s
https://www.youtube.com/watch?v=Hr3lD0BV3Rk&list=PLyQR2NzLKOCaU8EZnKIIuJsZDM0xVUZ6r&index=44&t=426s
개발 공부를 위한 블로그 입니다.
오류가 있다면 댓글로 알려주세요!
감사합니다.

728x90
'나를 기록하기 > [자격증] SQLD' 카테고리의 다른 글
[SQLD] 1과목 2장 - 데이터 모델과 성능 (0) | 2023.03.17 |
---|---|
[SQLD] 45회차 회고...🤣 (0) | 2023.02.20 |
[SQLD] 2과목 2장 - SQL 활용(Q.92~127) (0) | 2022.05.24 |
[SQLD] 2과목 2장 - SQL 활용(Q.65~91) (0) | 2022.05.22 |
[SQLD] 2과목 1장 - SQL 기본(Q.52~63) (0) | 2022.05.21 |