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

by 구사일생 [SQL Query] 대량테이블 N개의 컬럼 [2023.01.05 20:41:16]


작년 1월에 위 제목으로 문의를 올려 마농님께서 아래와 같은 답을 주셔서 잘 이용 하였습니다.

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

그런데 얼마전 건수가 대량 테이블의 컬럼별 건수가 약간씩 오차가 나는 테이블이 생겨 확인 해 보니 컬럼에 값이 없을때 컬럼이 null 이면 빠지더군요

이전 테스트한 테이블들은 모두 값이있어서(not null)이어서 문제가 없었습니다.

여러가지로 제가 해봤으나 모두 원하는 답을 찾지 못해 다시 문의 드립니다. 

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

UNION ALL SELECT '', 'C', 'c' FROM dual

UNION ALL SELECT '', 'C', 'c' FROM dual

UNION ALL SELECT '', 'C', 'c' FROM dual

이런식으로 cd1에 값이 없는 경우는 모두 빠지더군요. 이번에도 고수님들의 지도 부탁드립니다.

 

 

by pajama [2023.01.05 21:23:19]

제가 끼어서 죄송합니다~ unpivot에 include nulls 옵션을 사용하시면 될 듯합니다~

 UNPIVOT INCLUDE NULLS (cd FOR gb IN (cd1, cd2, cd3))


by 구사일생 [2023.01.06 20:13:48]

퇴근 후 혹시나하고 로그인 했는데 역시 반가운 소식이 기다리고 있었네요 ~~

이런 옵션이 있었는지 몰랐는데 감사 합니다.

월요일에 출근 하면 당장 적용해 보고 결과를 다시 올리겠습니다. 너무 감사합니다. 

그리고 어느분의 지혜든 빌릴 수 있는 저에게는 늘 고마운 일 입니다.


by 구사일생 [2023.01.09 20:05:22]

올려 주신 내용을 오늘 출근 하여 적용 해 보니 원하는 값이 잘 나옵니다.

기존에는 테이블 생성 시 컬럼에 not null 조건이 있는 컬럼을 대상으로만 테스트(적용) 하여 문제가 발견 되지 않았고

null이 존재 하는 컬럼에서 오차가 있다는걸 알지 못했었는데 맞는 답이 나와 감사할 따름 입니다.

언제나 처럼 좋은 내용 또하나 배워갑니다. 

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