it-swarm.com.de

Warum gibt COUNT () insgesamt 0 für 'NULL' zurück?

Eine SELECT-Anweisung gibt mehrere Zeilen zurück:

SELECT
  ColA
FROM
  TableA
WHERE
  ColA IS NULL

Ich erhalte 47 Zeilen mit 'NULL' für ColA in TableA.

ColA
NULL
NULL
NULL
etc...

Wenn ich dieser Abfrage ein Aggregat hinzufüge:

SELECT
  ColA,
  COUNT(ColA) AS theCount
FROM
  TableA
WHERE
  ColA IS NULL
GROUP BY ColA

Ich bekomme

ColA | theCount
NULL | 0

Warum passiert das und was kann ich tun, um dies zu vermeiden?

6
Zach Smith

Aggregatfunktionen ignorieren Nullwerte.

Damit

SELECT COUNT(cola) AS thecount
FROM tablea

ist äquivalent zu

SELECT count(*) AS thecount
FROM tablea
WHERE cola IS NOT NULL;

Da alle Ihre Werte null sind, muss count(cola) Null zurückgeben.

Wenn Sie die Zeilen zählen möchten, die null sind, benötigen Sie count(*)

SELECT cola,
       count(*) AS theCount
FROM tablea
WHERE cola is null
GROUP BY cola;

Oder einfacher:

SELECT count(*) AS theCount
FROM tablea
WHERE cola is null;

Wenn Sie NULL nd NOT NULL-Werte in einer einzelnen Abfrage zählen möchten, verwenden Sie:

SELECT count(cola) as not_null_count, 
       count(case when cola is null then 1 end) as null_count
FROM tablea;
27

Dies ist beabsichtigt.

COUNT(<expression>) zählt Zeilen, in denen <expression> nicht null ist.

COUNT(*) zählt Zeilen.

Wenn Sie also Zeilen zählen möchten, verwenden Sie COUNT(*).

19
ypercubeᵀᴹ