2022.03.09 정리
- 카테고리 없음
- 2022. 3. 9. 02:59
rollup vs cube vs grouping set
공부를 하면서 이 3가지가 굉장히 헷갈렸다. 특히 group by가 2~3개 이상 섞여있을 때 굉장히 문제를 해결하기 어려웠다.
이들을 쉽게? 해결하는 방법은 갯수를 세어 보는 방법이다.
예시 쿼리를 보여주고 싶기는 한데 그거까지 하기에는 조금 귀찮은 감이 조금 있어서 그거는 생략하도록 한다.
c1 | c2 | count |
A | 1 | 1 |
A | 2 | 1 |
A | 2 | |
B | 1 | 1 |
B | 2 | 2 |
B | 3 |
테이블이 이렇게 되있다고 생각해보자.
그럼 제일 먼저 해야 할 일은 count가 어떻게 들어 오는지 파악해야 한다.
확인 결과 (c1,c2) => A,1 이 1개라는 것을 알 수 있다.
이렇다는 것으로 미뤄봤을때 group by는 c1과 c2둘다 해당 된다는 것을 알 수 있다.
근데 문제는 c1,c2 와 c2,c1이랑 결과가 다를 수 있다.
특히나 rollup 이나 cube같은 경우는 더욱더 그렇다. 일단 위 같은 경우는 c1으로 시작을 하고 c2로 그룹을 지정해야 위 처럼 나온다.
이것을 알 수 있는 방법은 갯수를 세보는 방법인데
c1에 대한 결과 값이 작성되어있다. 결론적이면 c2에 대에서는 rollup이 발생되지 않는 다는 것을 알 수 있다.
만약 c2도 rollup이 발생하려면 맨 밑줄에 최종 결과가 작성되야 한다. 하지만 위 결과로 따졌을때는 그렇지 않다.
저게 rollup인데 cube는 도대체 뭘까?
듣기로는 다차원의 계수를 계산한다 뭐 그러는데 이게 뭘까?
c1 | c2 | count |
A | 1 | 1 |
A | 2 | 1 |
A | 2 | |
B | 1 | 1 |
B | 2 | 2 |
B | 3 | |
1 | 2 | |
2 | 3 | |
5 |
애초에 이렇게 나와 있어야 한다. rollup과 달리 c2에 대해서도 자세하게 기술이 되어있다. 이게 바로 cube다.
그렇다면 grouping set은 도대체 뭘까?
이건 굉장히 정직하다.
c1 | c2 | count |
A | 2 | |
B | 3 | |
1 | 2 | |
2 | 3 |
이거 같은 경우는 데이터가 정상?적이지 않아서 이렇게 밖에 표현이 안되는데
아무튼 내가 말하고 싶은건
grouping set은 A의 총 갯수 B의 총 갯수 이것을 기록한다.
쿼리는 기록하지 않았다.