SELECTステートメントは複数の行を返します。
SELECT
ColA
FROM
TableA
WHERE
ColA IS NULL
TableA内のColAに対して 'NULL'を持つ47行を取得します。
ColA
NULL
NULL
NULL
etc...
このクエリに集計を追加すると、次のようになります。
SELECT
ColA,
COUNT(ColA) AS theCount
FROM
TableA
WHERE
ColA IS NULL
GROUP BY ColA
私は得る
ColA | theCount
NULL | 0
なぜこれが起こっているのですか?これを回避するにはどうすればよいですか?
集計関数はnull値を無視します。
そう
_SELECT COUNT(cola) AS thecount
FROM tablea
_
に相当
_SELECT count(*) AS thecount
FROM tablea
WHERE cola IS NOT NULL;
_
すべての値がnullであるため、count(cola)
はゼロを返す必要があります。
Nullの行をカウントする場合は、count(*)
が必要です
_SELECT cola,
count(*) AS theCount
FROM tablea
WHERE cola is null
GROUP BY cola;
_
またはより単純:
_SELECT count(*) AS theCount
FROM tablea
WHERE cola is null;
_
単一のクエリでNULL and NOT NULL値をカウントする場合は、次を使用します。
_SELECT count(cola) as not_null_count,
count(case when cola is null then 1 end) as null_count
FROM tablea;
_
これは仕様によるものです。
COUNT(<expression>)
は、_<expression>
_がnullでない行をカウントします。
COUNT(*)
は行をカウントします。
したがって、行をカウントする場合は、COUNT(*)
を使用します。