CodeSprout程式萌芽
← 返回題庫 資料庫 SQL 基礎語法 / 第 157 題 操作教學 ↗
簡單SQL 內部連接

157. 校準距離

SQL 內部連接SQLNULL唯讀查詢

校準小組需要把測量資料與各區域測站設定逐一配對。

readings 與 stations 依 zone 相等連接;NULL zone 不匹配,包括兩側皆 NULL。一列若匹配多個測站,逐配對輸出,不去重。只保留兩值皆已知的配對,輸出 |reading-target|。

輸出欄位依序為 reading_id, station_id, gap。排序:reading_id 升序;再按 station_id 升序。文字排序採 ASCII 字元碼順序。

NULL 表示缺值,不等於 0 或空字串。WHERE/HAVING 只保留真值,假或未知皆排除;一般等號不匹配 NULL。算術操作數缺值時結果為 NULL,除非題目指定備援規則。COUNT(欄位)、SUM、AVG、MIN、MAX 忽略該欄 NULL;COUNT(*) 計算列數。未要求分組或去重時保留所有重複紀錄。空結果仍須具有指定欄名。

案例資料表

fixture 只建立以下資料表;資料插入順序不代表結果順序。

readings: id INTEGER NOT NULL, zone TEXT NULL, reading INTEGER NULL, weight INTEGER NULL, flag INTEGER NULL, day INTEGER NOT NULL, label TEXT NULL.

stations: station_id INTEGER NOT NULL, zone TEXT NULL, target INTEGER NULL, enabled INTEGER NULL.

JSON null 轉為 SQL NULL。每表第一欄 id/station_id 為唯一正整數;不同表中的相同 id 不表示配對。

查詢結果

查詢結果為 {columns,rows};columns 依序為 [reading_id, station_id, gap],rows 是按指定順序排列的普通資料列,空結果為 []。NULL 使用 JSON null。

範例 1

範例 2

每表 0 至 12 列。id/station_id 為 1 至 10000 的唯一整數。reading、weight、target 為 [-100,100] 整數或 NULL,負數表示帶方向的測量或校準值。flag、enabled 為 0、1 或 NULL;day 為 1 至 30 整數。zone、label 只含小寫 ASCII 字母,長度至多 20,也可能為空字串或 NULL。文字依二進位/字元碼順序比對並遵守指定排序。只提交使用 fixture 資料表的一個唯讀 SELECT 或 WITH 查詢,不修改資料庫,不依賴插入順序。數值結果使用平台所列浮點容許誤差;未要求時不自行四捨五入。

💡 給我一點提示+

JOIN 保留每個配對,一對多不可任意去重;NULL 不以一般等號匹配。

SQL 作答方式

直接撰寫一個 SELECT 查詢,可使用 WITH。右上方可切換 SQLite、PostgreSQL 與 MySQL;請使用所選引擎的語法。每組案例都會建立新的資料表,依題目規則比對欄位名稱、資料列與排序。

</>你的程式碼
本機草稿自動保存Tab 縮排・Esc 再 Tab 離開編輯器 ⌘ / Ctrl + Enter 測試

測試會執行 3 組公開案例與你新增的自訂案例。 登入後可提交程式,通過全部公開與隱藏測資後標記完成。

登入後提交

公開案例固定為 3 組。自訂案例只用於測試,不納入提交評分。0 / 17 組自訂案例

SQL 測試會傳送查詢與案例資料到伺服器,使用所選引擎隔離執行;測試不保存提交、不標記完成或增加 XP。每種引擎的本機草稿分開保留。