programing

Oracle: null 및 non-null 행을 카운트하는 방법

megabox 2023. 6. 8. 19:34
반응형

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

반응형