sourcecode

Oracle/PLSQL에서 NULL 값만 계산하려면 어떻게 해야 합니까?

copyscript 2023. 9. 11. 21:59
반응형

Oracle/PLSQL에서 NULL 값만 계산하려면 어떻게 해야 합니까?

Oracle/PLSQL에서 NULL 값만 계산하려면 어떻게 해야 합니까?

null 값만 세고 싶습니다.그렇게 하는 기능이 있습니까?

오라클은 자세히 모르지만 ANSI SQL은COUNT(rowName)계산 안 함NULL값들, 그러나COUNT(*)그래요. 그래서 당신은 글을 쓸 수 있습니다.

SELECT COUNT(*) FROM YourTable WHERE YourColumn IS NULL

이것은 YourColumn이 NULL로 설정된 YourTable의 행을 카운트합니다.

mdma의 대응에 대한 대안으로.필터를 넣고 싶지 않은 경우

SELECT COUNT(case when xxx IS NULL THEN 1 end) cnt_xxx_null
FROM table

Oracle 설명서에는 다음과 같이 명시되어 있습니다.

COUNT(*)와 GROUPING을 제외한 모든 집계 함수는 null을 무시합니다.인수의 NVL 함수를 사용하여 집합 함수에 값을 null로 대체할 수 있습니다.

예를 들어, Scott 스키마를 사용하면 다음과 같습니다.

SQL> select empno, sal, comm
  2  from emp;

     EMPNO        SAL       COMM
---------- ---------- ----------
      7369        800
      7499       1600        300
      7521       1250        500
      7566       2975
      7654       1250       1400
      7698       2850
      7782       2450
      7788       3000
      7839       5000
      7844       1500          0
      7876       1100
      7900        950
      7902       3000
      7934       1300

14 rows selected.

Comm 열에는 알려진 값 4개(null이 아님)와 알려지지 않은 값 10개(null)가 있습니다.

~하듯이count(your_column_name)는 알 수 없는 값을 참조할 수 있는 값으로 대체하는 데 필요한 null을 무시합니다.는 NVL 기능을 사용하여 달성할 수 있습니다.

SQL> select count(nvl(comm, -1)) "number of null values"
  2  from emp
  3  where nvl(comm, -1) = -1;

number of null values
---------------------
                   10

"-1"이 통신 열 내에 존재하는 값이 아니라는 것을 알기 때문에 "-1" 값을 null 값의 "alias"로 사용했습니다.

편집:

롭의 제안대로.위 예제에서 where 절을 제거하고 아래와 같이 NVL2 기능을 사용할 수 있습니다.

SQL> select count(nvl2(comm,null,-1)) "number of null values"
  2  from emp
  3  /

number of null values
---------------------
                   10

다른 값도 null로 계산하려면 COALESCE 함수를 사용하면 실행 시간이 단축됩니다.

NVL과 Coalesce의 Oracle 차이점

SELECT COUNT(COALESCE( _COLUMN, 1)) AS CNT FROM _TABLE

결과를 보고 널을 뒤집으려고 할 수도 있습니다.

SELECT
 COUNT(DECODE(YourField, null, 1, null)) Nulls,
 count(*) Everything,
 COUNT(YourField) NotNulls
FROM YourTable

모든 것은 null + null이 아닌 null이어야 합니다.

select count(nvl(values, 0)) from emp where values is null;

기능:

create or replace function xxhrs_fb_count_null
return number
as
l_count_null number;
begin
  select count(*) into l_count_null from emp where comm is null;
  return l_count_null;
end;

용도:

select xxhrs_fb_count_null from dual

당신의 요구사항은 아래와 같습니다.테이블emp행이 100개입니다.직원 20명에 대해서는HIRE_DATE열은NULL. 그래서 기본적으로 출력으로 20개를 받기를 원합니다.이는 이 포럼에서 다른 기고자들이 제시한 답변과는 별개의 또 다른 방법입니다.

-- COUNT (1) would return 100
-- COUNT (hire_date) would return 80
-- 100 - 80 = 20
SELECT   COUNT (1) -
                 COUNT (hire_date)
                 AS null_count
FROM      emp;

언급URL : https://stackoverflow.com/questions/2841551/how-can-i-count-only-null-values-in-oracle-plsql

반응형