old posting/MySQL

[SQL] ROLLUP(), CUBE(), GROUPING() 그리고 PIVOT(), UNPIVOT()

마케팅스프린트 2021. 6. 2. 18:07
  • ROLLUP()
    • 주어진 데이터들의 소계를 구해준다.
      • SELECT no, sum(pay) FROM test GROUP BY ROLLUP(no);
  • CUBE()
    • 주어진 데이터들의 소계와 총계를 구해준다.
      • SELECT no, sum(pay) FROM test GROUP BY CUBE(no);
  • GROUPING()
    • 컬럼이 해당 그룹핑 작업에 사용되었는지 아닌지를 구별해주는 함수, 컬럼이 그룹핑 작업에 사용되었으면 0을 반환하고 사용되지 않았으면 1을 반환한다.
      • SELECT no, sum(pay), GROUPING(no) FROM test GROUP BY ROLLUP(no);
  • LISTAGG()
    • 여러개의 행을 하나의 컬럼으로 합친다.
      • SELECT no, LISTAGG(name, '*') WITHIN GROUP(ORDER BY hiredate) FROM test GROUP BY no;
  • PIVOT()
    • ROW를 COLUMN 단위로 변경한다.
      • SELECT * FROM (SELECT c_week "주", c_day, c_num_day FROM t_cal) pivot(max(c_num_day) FOR c_day IN ('일' AS "일",'월' AS "월",'화' AS "화",'수' AS "수",'목' AS "목",'금' AS "금",'토' AS "토")) ORDER BY "주";
  • UNPIVOT()
    • COLUMN을 ROW 단위로 변경한다.