web-dev-qa-db-ja.com

Oracle:nullおよびnull以外の行をカウントする方法

null(および他のいくつかの列)である可能性がある2つの列を持つテーブルがあります。列a、b、両方があり、どちらの列もnullに設定されていない行の数を数えたい。

Oracleでこれを1つのクエリで実行できますか?または、それぞれに1つのクエリを作成する必要がありますか? group byや、他の例では知らない可能性があるものを使用できませんか?

21
Svish

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
48
Vincent Malgrat

このようなもの:

 SELECT sum(case 
 aがnullでbがnullの場合は1 
 else 0 
 end)をboth_null_count、
 sum(case 
 aがnullでbがnullでない場合は1 
、それ以外は0 
 end)as only_a_is_null_count 
 FROM your_table 

Null/not nullの他の組み合わせに対して拡張できます。

select sum(decode(a,null,0,1)) as "NotNullCount", sum(decode(a,null,1,0)) as "NullCount"
from myTable;

必要な数のフィールドに対して繰り返します。

3
tbone

Oracleでは1行で実行できます。

SELECT COUNT(NVL(potential_null_column, 0)) FROM table;

関数[〜#〜] nvl [〜#〜]は、最初の引数がnullかどうかをチェックし、2番目の引数の値として扱います。

1

これを行う1つの方法は次のとおりです。

select count(*) from table group by nvl2(a, 0, 1), nvl2(b, 0, 1) having nvl2(a,0,1) = nvl2(b,0,1);
0
ds27680

これは、Oracleのテーブルの列のグループにある空白セルの合計数を取得するために私にとってうまくいきました:空のスペースを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

お役に立てれば

乾杯。

0
Lorin Davis