[SQLD] GROUP BY FUNCTION

yurinnn·2024년 6월 19일

DB

목록 보기
6/9
  • 여러 GROUP BY 결과를 동시에 출력하는 기능

❗ ROLLUP, CUBE, GROUPING SETS 사용시 정렬이 필요한 경우는 ORDER BY절에 정렬 칼럼을 명시해야 된다.

GROUPING SETS(A, B,…)

  • A별, B별 그룹 연산 결과 출력
  • 나열 순서는 중요하지 않다.
  • 기본적으로 전체 총계는 출력하지 않는다. 전체 총계를 출력하고 싶으면 () 를 사용한다.
  • 각 소그룹별 합계만 보여준다.
    SELECT 상품ID,, SUM(매출액) AS 매출액
    FROM 월별매출
    GROUP BY GROUPING SETS(상품ID,);
  • GROUPING SETS 함수는 각각의 컬럼으로 GROUP BY한 값을 UNION ALL 한 것과 동일하다.
    SELECT 상품ID,, SUM(매출액) AS 매출액
    FROM 월별매출
    GROUP BY 상품ID
    UNION ALL
    SELECT 상품ID,, SUM(매출액) AS 매출액
    FROM 월별매출
    GROUP BY;
  • () 를 넣으면 전체 총계를 출력한다.
    SELECT 상품ID,, SUM(매출액) AS 매출액
    FROM 월별매출
    GROUP BY GROUPING SETS(상품ID,, ()); -- SUM(매출액)의 총계 출력 

ROLL UP(A, B)

  • A별, (A, B)별, 전체 그룹 연산 결과 출력
  • 나열 순서가 중요하다.
  • 기본적으로 전체 총계를 출력한다.
  • 맨 처음 명시한 컬럼에 대해서만 소그룹 합계를 구해준다.
    SELECT 상품ID,, SUM(매출액) AS 매출액
    FROM 월별매출
    GROUP BY ROLLUP(상품ID,);

CUBE(A, B)

  • A별, B별, (A, B)별, 전체 그룹 연산 결과 출력
  • 나열 순서는 중요하지 않다.
  • 기본적으로 전체 총계를 출력한다.
    SELECT 상품ID,, SUM(매출액) AS 매출액
    FROM 월별매출
    GROUP BY CUBE(상품ID,);
    
    # GROUPING SETS 으로 대체 가능 
    SELECT 상품ID,, SUM(매출액) AS 매출액
    FROM 월별매출
    GROUP BY GROUPING SETS(상품ID,, (상품ID,), ());
    상품ID별 합계 뿐만 아니라 월별 합계까지 한 번에 볼 수 있다.
profile
슬기로운 개발 생활

0개의 댓글