跳至內容
Astera Technology

先篩大數行,為何總額合資格組別錯了?

正負行先合成組總數,才套門檻。

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

準備報表輸入

本例列正負單位淨合計大於五的組,A 為 +4、+4,B +6、−2。WHERE units>5 會先刪輸入行,HAVING SUM(units)>5 才查組總數。

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

假設輸入:changes
編號組代碼正負單位
1A4
2A4
3B6
4B-2
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE changes(id INTEGER PRIMARY KEY,group_code TEXT NOT NULL,units INTEGER NOT NULL); INSERT INTO changes VALUES(1,'A',4),(2,'A',4),(3,'B',6),(4,'B',-2);

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT group_code,SUM(units) AS total_units FROM changes WHERE units>5 GROUP BY group_code ORDER BY group_code;
錯誤查詢的逐行結果
組代碼合計單位
B6
下載可編輯 CSV ↓
更正 SELECT
SELECT group_code,SUM(units) AS total_units FROM changes GROUP BY group_code HAVING SUM(units)>5 ORDER BY group_code;
更正查詢的逐行結果
組代碼合計單位
A8
下載可編輯 CSV ↓

錯誤列 B=6、丟 A。真正 A=8、B=4,只有 A 符合。輸入已是正負變動,負更正也要計入合計。

用新副本測邊界

B 再加 +2,淨額六,才與 A 一起符合。

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

邊界改動及更正查詢
INSERT INTO changes VALUES(5,'B',2);
SELECT group_code,SUM(units) AS total_units FROM changes GROUP BY group_code HAVING SUM(units)>5 ORDER BY group_code;
邊界查詢的逐行結果
組代碼合計單位
A8
B6
下載可編輯 CSV ↓

原例 B 有一行六,為何仍不合?

查看參考答案

負二令組合計成四,報表條件要查完整組合計。

相關資源