Dev JS Blog

[MySQL] with rollup 기능 본문

옛날 창고/SQL

[MySQL] with rollup 기능

Dev JS 2018. 6. 27. 11:00
728x90

[MySQL] with rollup 기능




with rollup 기능에 대해서 알아보겠습니다.

rollup은 통계데이터 쿼리를 만들때 이용을 하면 좋은 기능입니다.

어떻게 활용하는지는 먼저 보시죠~


일단 테이블을 새로 만들기는 그렇고 데이터 하나를 임시로 만들겠습니다.

다른분들은 기존 테이블이 있으실테니 저를 따라 안하셔도 됩니다.


일단 쿼리를 이렇게 짜보겠습니다.

CODE 란 데이터가 A 3개, B 1개 인 테이블이 있다고 합시다~


SELECT

code

FROM(

SELECT 'A' as code FROM dual

union all

SELECT 'A' as code FROM dual

union all

SELECT 'A' as code FROM dual

union all

SELECT 'B' as code FROM dual)x


결과 > 


code

 A

 A

 A

 B


 여기서 각각 데이터의 개수를 알아보기 위해서 sum과 group by를 이용하겠습니다.


SELECT

code, sum(1) cnt

FROM(

SELECT 'A' as code FROM dual

union all

SELECT 'A' as code FROM dual

union all

SELECT 'A' as code FROM dual

union all

SELECT 'B' as code FROM dual)x

group by code


결과>


 code

cnt 

 A

 B


A 3개 ,B 1개라는 결과가 나옵니다. 그럼 이제 rollup을 써보겠습니다.


SELECT

code, sum(1) cnt

FROM(

SELECT 'A' as code FROM dual

union all

SELECT 'A' as code FROM dual

union all

SELECT 'A' as code FROM dual

union all

SELECT 'B' as code FROM dual)x

group by code with rollup


결과>


 code

cnt 

(null) 


어떤 결과가 나왔는지 이해가 가시나요..?

rollup을 code로 했을떄 마지막 행에 code 에 대한 전체 합계가 나옵니다.


그래서 이걸 조금 활용을 하자면


SELECT

case when ifnull(code,'') = '' then '합계' else code end as code

sum(1) cnt

FROM(

SELECT 'A' as code FROM dual

union all

SELECT 'A' as code FROM dual

union all

SELECT 'A' as code FROM dual

union all

SELECT 'B' as code FROM dual)x

group by code with rollup


결과>


 code

cnt 

합계 


마지막 code가 null로 나오니 그걸 이용해서 그부분을 합계로 

나오도록 case when 을 활용해주었습니다.


이런식으로 rollup 을 써주신다면 통계 쿼리를 짤때 

합계를 잘 구할수 있겠죠??


쿼리 공부를 한다면 통계 쿼리는 언제나 해야하는 것이니~

열심히 공부합시다.




728x90

'옛날 창고 > SQL' 카테고리의 다른 글

[SQL] JOIN 에 대해서  (0) 2018.12.23
[Oracle] row_number() over() 활용  (0) 2018.12.21
[Oracle] order by 기초  (0) 2018.12.20
[MySql] 두 날짜 일 수 차이 구하기  (0) 2018.05.14
[MySQL] 날짜 더하기 빼기 date_add  (0) 2018.04.05
Comments