跳至內容
Astera Technology

有效零讀數為何改用後備值?

零是真觀察時,只按 NULL 才轉後備。

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

準備報表輸入

本例只要主值已有記錄,包括零,便優先用;主值 NULL 才轉後備。NULLIF(primary_value,0) 先把零變 NULL,破壞此分別。

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

假設輸入:readings
編號主讀數後備讀數
A08
BNULL(未知或沒有)5
C39
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE readings(id TEXT PRIMARY KEY,primary_value INTEGER,backup_value INTEGER); INSERT INTO readings VALUES('A',0,8),('B',NULL,5),('C',3,9);

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT id,COALESCE(NULLIF(primary_value,0),backup_value) AS selected_value FROM readings ORDER BY id;
錯誤查詢的逐行結果
編號所選值
A8
B5
C3
下載可編輯 CSV ↓
更正 SELECT
SELECT id,COALESCE(primary_value,backup_value) AS selected_value FROM readings ORDER BY id;
更正查詢的逐行結果
編號所選值
A0
B5
C3
下載可編輯 CSV ↓

A 應留零,錯誤卻用八。B 主值未知,所以合理用五;C 留三。

用新副本測邊界

加兩值都是 NULL 的 D,結果仍 NULL,不編零。

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

邊界改動及更正查詢
INSERT INTO readings VALUES('D',NULL,NULL);
SELECT id,COALESCE(primary_value,backup_value) AS selected_value FROM readings ORDER BY id;
邊界查詢的逐行結果
編號所選值
A0
B5
C3
DNULL(未知或沒有)
下載可編輯 CSV ↓

更正後 A 用哪值?

查看參考答案

零,主讀數已記,毋須後備八;D 兩者皆無則仍未知。

相關資源