跳至內容
Astera Technology

短清單明明已排序,為何漏了最高優先項?

全部候選先排好,才選首兩項。

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

準備報表輸入

本例要最高數字優先兩項,相同按 id。錯子查詢先取 id 最低兩項,再排這個已截集合,外面排得對也找不回已丟 C。

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

假設輸入:items
編號優先值
A1
B2
C9
下載可編輯 CSV ↓
完整建表及插入假設資料
CREATE TABLE items(id TEXT PRIMARY KEY,priority INTEGER NOT NULL); INSERT INTO items VALUES('A',1),('B',2),('C',9);

比較錯誤及更正結果

錯誤 SELECT:重現問題
SELECT id,priority FROM (SELECT id,priority FROM items ORDER BY id LIMIT 2) ORDER BY priority DESC,id;
錯誤查詢的逐行結果
編號優先值
B2
A1
下載可編輯 CSV ↓
更正 SELECT
SELECT id,priority FROM items ORDER BY priority DESC,id LIMIT 2;
更正查詢的逐行結果
編號優先值
C9
B2
下載可編輯 CSV ↓

錯結果 B(優先值2)、A(1)只在錯集合內排好;更正 C(9)、B(2)是先排齊三項再 LIMIT。

用新副本測邊界

加 D 優先十,更正首兩項成優先值10 的 D、9 的 C。

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

邊界改動及更正查詢
INSERT INTO items VALUES('D',10);
SELECT id,priority FROM items ORDER BY priority DESC,id LIMIT 2;
邊界查詢的逐行結果
編號優先值
D10
C9
下載可編輯 CSV ↓

事後再排 A、B,可帶回 C 嗎?

查看參考答案

不能,C 已不在子查詢結果,選項須在全量優先排序之後。

相關資源