나를 기록하기/[자격증] SQLD

[SQLD] 2과목 2장 - SQL 활용(Q.105 ~ 111)

배고파요 2022. 5. 27. 16:50
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 : (COL1COL2)
    • 결과 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=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