跳至內容
Astera Technology

COUNT 為何連條件為零的分支也計?

不符合要數的條件就留 NULL,不填數字零。

下載完整個案資料及參考答案 ↓

準備報表輸入

本例只數 needs_review=1。COUNT 運算值會數所有非 NULL,零也計,所以 ELSE 0 把不符條件也數了。省 ELSE 才令該分支為 NULL。

以下記錄及報表規則均為原創假設。在新 SQLite 測試資料庫重做建表,預覽包含此小型例子每張表。

假設輸入:checks
編號需覆核旗標
A1
B0
C0
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE checks(id TEXT PRIMARY KEY,needs_review INTEGER); INSERT INTO checks VALUES('A',1),('B',0),('C',0);

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT COUNT(CASE WHEN needs_review=1 THEN 1 ELSE 0 END) AS review_count FROM checks;
錯誤查詢的逐行結果
覆核數
3
下載可編輯 CSV ↓
更正 SELECT
SELECT COUNT(CASE WHEN needs_review=1 THEN 1 END) AS review_count FROM checks;
更正查詢的逐行結果
覆核數
1
下載可編輯 CSV ↓

三項只有 A 標 1,錯誤數三,更正數一。不符條件分支須為 NULL,COUNT 才不計。

用新副本測邊界

再加明確待覆核 D,計數由一升兩。

另開新資料庫重做原建表,才套下列改動及更正查詢。空結果在表內用已標明空結果文字表示,不是假資料行。

邊界改動及更正查詢
INSERT INTO checks VALUES('D',1);
SELECT COUNT(CASE WHEN needs_review=1 THEN 1 END) AS review_count FROM checks;
邊界查詢的逐行結果
覆核數
2
下載可編輯 CSV ↓

B 的零分支對 COUNT 是否等於沒有?

查看參考答案

不是,零非 NULL 會計。更正 CASE 對 B 回 NULL,加 D 前得一。

相關資源