반응형
Oracle: null 및 non-null 행을 카운트하는 방법
두 개의 열이 있는 테이블이 있습니다.null
(및 기타 일부 열).열이 a, b, 둘 다이고 두 열 모두 null로 설정된 행의 수를 계산하려고 합니다.
Oracle을 한 번의 쿼리로 실행할 수 있습니까?아니면 각각 하나씩 쿼리를 만들어야 합니까?사용할 수 없음group by
아니면 내가 모르는 다른 것들을 예를 들어?
COUNT(expr)
의 행 수를 계산합니다.expr
는 null이 아니므로 다음과 같은 식을 사용하여 null의 수를 계산할 수 있습니다.
SELECT count(a) nb_a_not_null,
count(b) nb_b_not_null,
count(*) - count(a) nb_a_null,
count(*) - count(b) nb_b_null,
count(case when a is not null and b is not null then 1 end)nb_a_b_not_null
count(case when a is null and b is null then 1 end) nb_a_and_b_null
FROM my_table
이와 같은 것:
SELECT 합계(케이스)a가 null이고 b가 null인 경우 1그렇지 않으면 0end) both_both_count로서,합계(경우)a가 null이고 b가 null이 아닌 경우 1그렇지 않으면 0end) only_a_is_message_count로 지정테이블에서
null/not null의 다른 조합에 대해 확장할 수 있습니다.
select sum(decode(a,null,0,1)) as "NotNullCount", sum(decode(a,null,1,0)) as "NullCount"
from myTable;
원하는 필드 수만큼 반복합니다.
Oracle에서는 다음과 같은 단 한 행으로 수행할 수 있습니다.
SELECT COUNT(NVL(potential_null_column, 0)) FROM table;
함수 NVL은 첫 번째 인수가 null인지 확인하고 두 번째 인수의 값으로 처리합니다.
이것은 오라클에서 테이블의 열 그룹에 있는 빈 셀의 총 카운트를 계산하는 데 효과적이었습니다.빈 공간을 null로 카운트하도록 트림을 추가했습니다.
SELECT (sum(case
when trim(a) is null Then 1
else 0
end)) +
(sum(case
when trim(b) is null
else 0
end)) +
(sum(case
when trim(c) is null
else 0
end)) as NullCount
FROM your_table
이것이 도움이 되길 바랍니다.
건배.
SQL>CREATE TABLE SAMPLE_TAB (COL1 NUMBER NOT NULL, COL2 DATE DEFAULT SYSDATE, COL3 VARCHAR2(20));
SQL>INSERT INTO SAMPLE_TAB(COL1,COL2,COL3) VALUES(121,SYSDATE-2,'SAMPLE DATA');
SQL>INSERT INTO SAMPLE_TAB(COL1,COL2,COL3) VALUES(122,NULL,NULL); --ASSIGN NULL TO COL2
SQL>INSERT INTO SAMPLE_TAB(COL1,COL3) VALUES(123,'SAMPLE DATA RECORD 3');--COL2 DEFAULT VALUE ASSIGN AS SYSDDATE AS PER STRUCTURE.
SQL>COMMIT;
SQL> SELECT * FROM SAMPLE_TAB;
SQL> SELECT *
FROM USER_TAB_COLUMNS U
WHERE 1=1
AND TABLE_NAME='SAMPLE_TAB'
AND NUM_NULLS!=0;
SQL> ANALYZE TABLE SAMPLE_TAB COMPUTE STATISTICS;
SQL> SELECT *
FROM USER_TAB_COLUMNS U
WHERE 1=1
AND TABLE_NAME='SAMPLE_TAB'
AND NUM_NULLS!=0;
한 가지 방법은 다음과 같습니다.
select count(*) from table group by nvl2(a, 0, 1), nvl2(b, 0, 1) having nvl2(a,0,1) = nvl2(b,0,1);
언급URL : https://stackoverflow.com/questions/5512691/oracle-how-to-count-null-and-non-null-rows
반응형
'programing' 카테고리의 다른 글
Vue + Vuex + Phaser 반응형 통화에서 '이' 스코프가 손실됨 (0) | 2023.06.08 |
---|---|
sklearn에서 'fit_sk'와 'fit_sk'의 차이점은 무엇입니까? (0) | 2023.06.08 |
Xcode 8 - IB Designables - 자동 레이아웃 상태 렌더링 및 업데이트 실패, 에이전트 충돌 (0) | 2023.06.08 |
fputcsv and integer typcasting to string (0) | 2023.06.08 |
워크북을 개체로 정의할 수 없는 이유는 무엇입니까? (0) | 2023.06.08 |