안녕하세요
SQLD를 준비하고 있는데, 공부를 시작한지 얼마 되지 않아 궁금한게 많이 생기네요ㅎ
아래 문제에 대한 해설을 몇가지 보았는데도 어려워서, 이렇게 이해하면 맞는 것인지 전문가님들께 여쭤보고 싶었습니다.
Col1 Col2
_____________
A 100
B 200
C 300
C 400
1.
Group by - 같은 값을 가진 행끼리 하나의 그룹으로 뭉쳐줌
<<
SELECT COUNT(*)
FROM SQLD_40
GROUB BY COL1
>>
COUNT
_______
1
1
2
(Col1 안에 A,B,C라는 값이 각각 1,1,2개 들어있다고 출력)
2.
Roll up- group by로 묶인 그룹의 집계를 하는 함수
<<
SELECT COUNT(*)
FROM SQLD_40
GROUB BY ROLL UP (COL1), COL1
>>
COUNT
_______
1
1
1
1
2
2
Col1 안에 A,B,C라는 그룹의 값에 그룹별 집계 실행. 즉,
COUNT
_______
1 - 기존의 Group by A그룹 값
1 - Roll up한 A그룹 집계 값
1 - 기존의 Group by B그룹 값
1 - Roll up한 B그룹 집계 값
2 - 기존의 Group by C그룹 값
2 - Roll up한 C그룹 집계 값
3.
결과적으로
GROUB BY COL1 로, COL1 내 그룹별로 Count를 한 것에
ROLL UP으로 COL1 내 그룹별 집계를 또 해달라고 한 것이라
다 같은 기준 집계여서 집계를 두번한 꼴이 되는 것
위와 같이 이해 한 게 맞을까요~?
아시는 분 있으시면 답변 한번 부탁드려요. 감사합니다 :)
두번한 꼴이 되는가? 맞습니다.
Reporing함수인데요. 보통 Rollup, cube는 총계, 소계등을 구할때 사용합니다.
그런데 group by 에 원래의 칼럼이 들어오면서 rollup의 의미가 없어져버린 쿼리인 듯합니다.
보통은 이런 쿼리가 됩니다.
with tmp as (
select cast('A' as varchar(100)) as col1, 100 as col2 union all
select 'B', 200 union all
select 'C', 300 union all
select 'C', 400
)
select isnull(col1, 'Total') as col1, count(*) from tmp
group by rollup(col1)