跳至內容
Astera Technology

報表標籤須分大小寫,為何卻合了組?

在 GROUP BY 明訂報表比較規則。

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

準備報表輸入

本例 a、A 是不同標籤,舊欄卻定 NOCASE。GROUP BY 未覆寫就沿該比較。分組改 BINARY 才保兩原大小寫,顯示最低值也用 BINARY 固定代表字樣。

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

假設輸入:labels
編號原標籤
1a
2A
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE labels(id INTEGER PRIMARY KEY,label TEXT COLLATE NOCASE NOT NULL); INSERT INTO labels VALUES(1,'a'),(2,'A');

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT min(label COLLATE BINARY) AS label,COUNT(*) AS records FROM labels GROUP BY label ORDER BY label COLLATE BINARY;
錯誤查詢的逐行結果
原標籤記錄數
A2
下載可編輯 CSV ↓
更正 SELECT
SELECT min(label COLLATE BINARY) AS label,COUNT(*) AS records FROM labels GROUP BY label COLLATE BINARY ORDER BY label COLLATE BINARY;
更正查詢的逐行結果
原標籤記錄數
A1
a1
下載可編輯 CSV ↓

錯 A 組有兩筆,更正 A、a 各一。顯示最低值的 BINARY 只選代表字樣,GROUP BY 的 BINARY 才分開兩組。

用新副本測邊界

再加 a,小寫組兩筆、大寫仍一。

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

邊界改動及更正查詢
INSERT INTO labels VALUES(3,'a');
SELECT min(label COLLATE BINARY) AS label,COUNT(*) AS records FROM labels GROUP BY label COLLATE BINARY ORDER BY label COLLATE BINARY;
邊界查詢的逐行結果
原標籤記錄數
A1
a2
下載可編輯 CSV ↓

邊界兩組各多少?

查看參考答案

A=1、a=2,按本例分大小寫報表,原標籤仍不同。

相關資源