null
(および他のいくつかの列)である可能性がある2つの列を持つテーブルがあります。列a、b、両方があり、どちらの列もnullに設定されていない行の数を数えたい。
Oracleでこれを1つのクエリで実行できますか?または、それぞれに1つのクエリを作成する必要がありますか? 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 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;
必要な数のフィールドに対して繰り返します。
Oracleでは1行で実行できます。
SELECT COUNT(NVL(potential_null_column, 0)) FROM table;
関数[〜#〜] nvl [〜#〜]は、最初の引数がnullかどうかをチェックし、2番目の引数の値として扱います。
これを行う1つの方法は次のとおりです。
select count(*) from table group by nvl2(a, 0, 1), nvl2(b, 0, 1) having nvl2(a,0,1) = nvl2(b,0,1);
これは、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
お役に立てれば
乾杯。