반응형

카운트 하는 여러가지 방법.

 
전체건수에서 성별 구하는 것은 다른 방법으로도 가능하지만, COUNT로 표현하는 방법으로 작성했다.
(예: SUM( DECODE( H_SEX, '1', 1, 0 ) ) 건수_남 )

통계할 때 사용했었는데 DISTINCT안에 CASE 사용하는 것은 처음인 것 같아서...

 1. COUNT 안에서 CASE 문 사용 가능: 전체 건수로 작성하고자 할때
 2. COUNT 안에 DISTINCT + CASE 사용 가능: 중복제거 후 사용하고자 할때


  

 

SELECT
    COUNT(*) 전체건수
    , COUNT( CASE WHEN H_SEX = '1' THEN H_ID END ) 건수_남
    , COUNT( CASE WHEN H_SEX = '2' THEN H_ID END ) 건수_여
    , COUNT( DISTINCT H_ID ) 대상수
    , COUNT( DISTINCT (CASE WHEN H_SEX = '1' THEN H_ID END) ) 대상_남
    , COUNT( DISTINCT (CASE WHEN H_SEX = '2' THEN H_ID END) ) 대상_여
FROM(
    SELECT 1 SEQ, '201910001' H_ID, '1' H_SEX, 'TEST1' CMT FROM DUAL
    UNION
    SELECT 2 SEQ, '201910001' H_ID, '1' H_SEX, 'TEST2' CMT FROM DUAL
    UNION
    SELECT 3 SEQ, '201910001' H_ID, '1' H_SEX, 'TEST3' CMT FROM DUAL
    UNION
    SELECT 4 SEQ, '201910002' H_ID, '2' H_SEX, 'TEST1' CMT FROM DUAL
    UNION
    SELECT 5 SEQ, '201910002' H_ID, '2' H_SEX, 'TEST2' CMT FROM DUAL
    UNION
    SELECT 6 SEQ, '201910003' H_ID, '1' H_SEX, 'TEST1' CMT FROM DUAL
);
반응형
반응형

이것도 생각보다 자주 사용하는 것 같다.

사용하다 보니 문자열 byte가 4000 기준으로 코드가 다르긴 한데, 난 그냥 4000바이트 이상 조회되는 것으로 대부분 처리한다.

 

1. 컬럼이 4000byte 이상인 경우

// 4000byte 이상
SELECT
     SUBSTR(XMLAGG (XMLELEMENT(X,',', LEVEL ) ORDER BY LEVEL).EXTRACT('//text()'),2) CONTENTS
FROM DUAL 
CONNECT BY LEVEL <= 10;

 


  

 

2. 컬럼이 4000byte 미만인 경우

// 4000byte 미만인 경우
SELECT
    LISTAGG( LEVEL, ',') WITHIN GROUP(ORDER BY LEVEL) LISTS
FROM DUAL
CONNECT BY LEVEL <= 10

 

표현은 동일하지만, 2번째 방법으로 사용할 때는 작은 데이터로만 하길...

반응형
반응형

전화번호의 경우 형식에 맞게 작성해주면 좋으련만, 상황에 따라서 조금 다르게 입력되는 경우가 있다.

처음 개발할 때부터 숫자만 입력하게 만들거나, 기타 다른 것을 입력 못하게 하거나, 혹은 띄어쓰기나 이런 것들을 다 개발해 넣기엔 시간이 없으려나.

간단하게 입력된 데이터를 보고 숫자만 불러와서 형식에 맞게 다시 표시하는 정규식이다.

휴대전화 번호나 집 전화번호 등이 000-0000-0000 등의 형식으로 보인다.


  

 

SELECT
	REGEXP_REPLACE(REGEXP_REPLACE ('010-1111-1111', '[^[:digit:]]'),
    '(^02|050[[:digit:]]{1}|[[:digit:]]{3})([[:digit:]]{3,4})([[:digit:]]{4})', 
    '\1-\2-\3')
FROM DUAL;

 

 

반응형
반응형

매번 UNION, UNION ALL만 사용하다 교집합, 차집합이 생각이 안나서,..

이것도 특별히 자주 사용하는 것은 아닌데, 플래시백 하면 한 번씩 생각나더라. 기존 데이터랑 지금 데이터가 다른 거 찾아낼 때 유용했음.

한두 개야 그냥 하면 되는데 데이터가 많아질수록 편리하게 검사할 수 있음.

https://blog.naver.com/langnei/220708702966

 

오라클 합집합/교집합/차집합 (UNION/UNION ALL/INTERSECT/MINUS)

UNION : 합집합UNION은 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않은 값...

blog.naver.com


  

 

UNION : 합집합 - UNION은 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않은 값들을 반환한다.

UNION ALL : 중복을 포함하는 합집합 - UNION과 같으나 두 테이블의 중복되는 값까지 반환한다.


INTERSECT : 교집합 - INTERSECT는 두 행의 집합 중 공통된 행을 반환한다.


MINUS : 차집합 - MINUS는 첫 번째 SELECT문에 의해 반환되는 행 중에서 두 번째 SELECT문에 의해 반환되는 행에 존재하지 않는 행들을 반환한다.

반응형
반응형

개발자마다 조금 다르게 사용하고, 또 입력된 데이터를 상황에 맞춰 변경할 때가 있다.

SQL쿼리도 그런 경우인데... 멀티 체크를 한 데이터를 하나씩 쪼개는 경우에 사용했다.

진짜 별거 아닌데... 찾으면 나오는 자료인데... 꼭 찾으려고 하면 안나와서 남긴다.

기억하면 될 걸... 그래도 매일 사용하는게 아니라서 그런지.. 자꾸 잊어버리게 된다.


  

 

SELECT 
	REGEXP_SUBSTR(VAL, '[^,]+', 1, LEVEL) VAL
FROM (SELECT '1,2,3,4,5' VAL FROM DUAL)
CONNECT BY REGEXP_SUBSTR(VAL, '[^,]+', 1, LEVEL ) IS NOT NULL
;

한줄에 표시된 '1,2,3,4,5' 를 

1

2

3

4

5

와 같이 한줄로 표시된다.

반응형

+ Recent posts