대량테이블 N개의 컬럼별 건수 구하기 0 3 2,313

by 구사일생 [SQL Query] 대량테이블 N개의 컬럼 [2022.01.13 21:09:39]


20억건이 넘들 Big 테이블을 코드 컬럼별로 

SELECT  코드1,COUNT(*) FROM Big_Table
GROUP BY 코드1

SQL돌려서 결과를 내야 합니다.

그런데 한 테이블에 코드1,코드2....N개의 컬럼이 존재 합니다.

그러다 보니 Big 테이블을 여러번 SELECT 해서 시간도 오래 걸립니다.

테이블을 1번만 읽어서 N개의 코드 컬럼의 결과를 위 같은 내용으로 구 할수 있는지 고수님들이 지도 부탁 드립니다.

참고로 DB는 오라클 11g 이며 주기적으로 30여 개의  BIG TABLE을 위와 같은 방법으로 오랜 시간이 걸려 작업 중 입니다.
 

by 마농 [2022.01.14 06:56:10]

UNPIVOT 을 이용하면 한번에 집계 가능합니다.
다만, 대용량에서 속도가 나올지는 모르겠네요.
 

WITH t AS
(
SELECT '1' cd1, 'A' cd2, 'a' cd3 FROM dual
UNION ALL SELECT '1', 'A', 'a' FROM dual
UNION ALL SELECT '1', 'B', 'a' FROM dual
UNION ALL SELECT '2', 'B', 'a' FROM dual
UNION ALL SELECT '2', 'B', 'b' FROM dual
UNION ALL SELECT '2', 'C', 'b' FROM dual
UNION ALL SELECT '3', 'C', 'b' FROM dual
UNION ALL SELECT '3', 'C', 'c' FROM dual
UNION ALL SELECT '3', 'C', 'c' FROM dual
)
SELECT gb
     , cd
     , COUNT(*) cnt
  FROM t
 UNPIVOT (cd FOR gb IN (cd1, cd2, cd3))
 GROUP BY gb, cd
 ORDER BY gb, cd
;

 


by 마농 [2022.01.14 08:25:42]

주기적으로 작업을 한다면?
집계테이블을 미리 만들어 놓고
최신 자료만 집계하여 기존자료에 머지시키는 방법도 생각해 볼 수 있습니다.


by 구사일생 [2022.01.14 22:43:46]

역시 ~~~~

답글 감사합니다.

그런데 프로젝트라서 제가 마음대로 집계테이블을 만들수는 없어서요

감사드립니다.  출근 해서 바로 테스트  해 보겠습니다. 

주말 잘 보내세요

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입