← 返回首页目录
# QUERY 函式大解析(一):基本原理與 SELECT
作者:吉祥法师
## 引言:認識 QUERY 函式
在 Google 試算表的眾多函式中,QUERY 無疑是功能最強大、應用最廣泛的工具之一。它的核心價值在於能夠對大量資料進行特定資訊的查詢,並依據使用者設定的篩選條件,快速且精準地回傳所需的儲存格、欄位或資料範圍。對於經常需要處理數據分析、資料統整工作的使用者而言,QUERY 不僅能大幅提升工作效率,更能簡化繁複的資料處理流程。
QUERY 函式所使用的語言為 **Google Visualization API Query Language**(Google 視覺化 API 搜尋語言),這是由 Google 開發的一套類似 SQL(結構化查詢語言)的查詢語法。對於已經熟悉 SQL 的資料庫使用者來說,學習 QUERY 可謂事半功倍,因為兩者的核心概念與語法結構高度相似。而對於從 Excel 轉換到 Google 試算表的使用者而言,QUERY 雖然需要一些時間適應,但其直覺的語法設計和強大的功能,絕對值得投入學習。
## QUERY 函式的優點與缺點
### 優點
**1. 執行效率極高**
相較於其他資料讀取方式(如 IMPORTRANGE 函式或直接使用「=」符號進行儲存格參照),QUERY 的運算速度極為迅捷。即使在處理龐大數據資料時,QUERY 通常也能在極短的時間內完成查詢運算,讓使用者幾乎感受不到等待時間。這項特性使得 QUERY 成為處理大量資料時的首選工具。
**2. 維護成本低**
QUERY 採用類似 SQL 的語法結構,具備高度直覺性與可讀性。當需要修改查詢條件或調整輸出欄位時,只需編輯語法字串即可完成,無須重新設計整個公式結構。這種設計大幅降低了維護成本,也讓程式碼更具可維護性。
**3. 具備即時資料庫功能**
QUERY 特別適合用於快速搜尋資訊與小型資料庫管理。當原始資料在試算表中變動時,QUERY 的輸出結果也會即時更新,宛如一個小型的動態資料庫系統。這項特性讓 QUERY 成為工作中不可或缺的資料統整利器。
### 缺點
**1. 輸出結果無法直接編輯**
與 FILTER、IMPORTRANGE 等函式相同,QUERY 的輸出結果是唯讀的,無法直接在結果區域進行編輯。若試圖編輯輸出結果,系統會產生錯誤訊息。若需編輯輸出資料,建議採用「原地貼上」的方式,將查詢結果轉換為靜態資料後再進行修改。然而,當資料筆數過多時,可能需要透過下載 CSV 檔案再匯入、分段輸出查詢結果後再貼上,或利用 LIMIT 參數分批處理等替代方案。
**2. 資料筆數存在限制**
當查詢的資料量超過一定規模時,QUERY 的執行效率會明顯下降,甚至可能導致整個試算表運作遲緩。這種情況下,建議改用其他專業資料庫軟體來處理更大量的數據。
**3. 輸出格式無法保留**
QUERY 僅會輸出純文字資料,不會保留原始資料範圍內的格式設定。即使原始資料包含顏色、粗體、斜體、底線、字型等格式,QUERY 輸出結果也僅為未格式化文字。若需美化輸出結果,可利用條件式格式設定,或等資料處理完成後再手動調整格式。
## QUERY 函式的基本語法
QUERY 函式的語法結構相當簡潔明瞭,基本格式如下:
```
=QUERY(資料, 查詢, [標題])
```
### 參數說明
**1. 資料(範圍)**
此參數指定 QUERY 作業的資料來源儲存格範圍。資料範圍內可包含三種資料格式:布林值(TRUE/FALSE)、數值(包含日期與時間)以及文字。需特別注意的是,若某一欄位內混合了多種資料格式,QUERY 會以主要的資料類型進行判斷。具體而言,多數的資料格式會被視為主要格式,其餘少數格式則會被視為空值處理。這可能導致查詢結果失真,因此在執行 QUERY 前,務必確保每個欄位的資料格式一致且正確。
例如,若某一欄位應存放「金額」資料,則該欄位的所有儲存格都應為數值格式。若混入了布林值或時間等其他格式,QUERY 將無法正確讀取這些資料。
**2. 查詢(語法)**
此參數為 Google 視覺化 API 的查詢語言,用於指定 QUERY 的輸出內容與限制條件。查詢語法必須以英文雙引號("")完整包覆,否則系統將無法正確解析。常見的查詢語法範例包括:
```
=QUERY(資料, "SELECT *")
=QUERY(資料, "SELECT * WHERE B = 'Mr. Sheet'")
=QUERY(資料, "SELECT * WHERE B > 10 AND C > 10")
=QUERY(資料, "SELECT A, B, C WHERE G = '台灣'")
```
**3. 標題(選填)**
此參數用於指定資料範圍是否包含標題列。常見設定值為 -1、0、1 三種:
- **忽略或設為 -1**:QUERY 會根據資料內容自動推測是否包含標題列。
- **設為 0**:明確告知 QUERY 此資料範圍沒有標題列。
- **設為 1**:明確告知 QUERY 此資料範圍包含 1 列標題。
正確設定標題參數,有助於 QUERY 更精準地判讀資料結構,尤其在後續搭配 WHERE、ORDER BY 等進階語法時更顯重要。
## SELECT 語法詳解
SELECT 是 QUERY 函式中最基本也是最重要的指令,代表「選取」的意思,用於指定 QUERY 輸出哪些欄位。若省略 SELECT 指令,QUERY 將回傳資料範圍內的全部欄位,但為了確保程式碼的明確性與可讀性,建議始終明確寫出 SELECT 指令。
### SELECT * —— 選取全部欄位
使用星號(*)作為 SELECT 的參數,可以選取資料範圍內的所有欄位。語法如下:
```
=QUERY('小學列表'!A:G, "SELECT *")
```
這是最簡單且最常用的 SELECT 形式,特別適合需要完整查看資料內容的場景。
### SELECT A —— 選取單一欄位
指定特定的欄位字母,即可選取相對應的欄位。例如:
```
=QUERY('小學列表'!A:G, "SELECT B")
```
此語法會輸出「小學列表」工作表中 B 欄(即學校名稱)的所有資料。
**注意事項**:指定的欄位必須在 QUERY 定義的資料範圍內。若嘗試選取超出範圍的欄位,系統將產生錯誤。例如,若資料範圍定義為 A:D,但語法寫成 "SELECT E",則會出現錯誤訊息。
### SELECT A, B, C —— 選取多個欄位
使用逗號分隔多個欄位字母,即可同時選取多個欄位。例如:
```
=QUERY('小學列表'!A:G, "SELECT B, C, F")
```
此語法會依序輸出 B 欄(學校名稱)、C 欄(公/私立)與 F 欄(電話)的資料。
**進階應用**:SELECT 後方的欄位順序可以自由調整,不需依照字母順序排列。例如,若希望輸出結果依序為 B、C、A 欄的資料,只需撰寫 "SELECT B, C, A" 即可。這項特性讓使用者能夠彈性安排輸出欄位的呈現順序。
**彙總函式結合**:SELECT 指令可與多種彙總函式(如 AVG 平均、MAX 最大值、MIN 最小值、SUM 總和等)結合使用,進行資料統計分析。這部分將在後續文章中詳細介紹。
## 實際操作練習
為了幫助讀者更好地掌握 QUERY 與 SELECT 的實際應用,以下提供三個漸進式的練習範例。建議使用附有「小學列表」的範例試算表進行操作。
### 練習一:利用 SELECT 選取全部欄位
1. 在空白工作表中選擇一個儲存格作為輸出起點。
2. 輸入 `=QUERY(`。
3. 點選「小學列表」工作表,並以滑鼠選取 A 至 G 欄的全部資料範圍。
4. 輸入查詢語法 `"SELECT *"`,並加上右括號完成公式。
5. 按下 Enter 鍵執行查詢。
最終語法應為:
```
=QUERY('小學列表'!A:G, "SELECT *")
```
結果將顯示小學列表中的所有資料。請注意:輸出結果為純文字資料,原始資料的格式設定不會被保留。
**技巧提示**:建議以「欄」為單位選取資料範圍(如 A:G),而非以「列」為單位(如 1:2635),這樣當未來資料新增時,QUERY 仍能自動涵蓋新資料,無需手動調整範圍。
### 練習二:利用 SELECT 選取「學校名稱」
若欲僅選取「小學列表」中的學校名稱欄位(位於 B 欄),語法如下:
```
=QUERY('小學列表'!A:G, "SELECT B")
```
執行後,輸出結果將僅顯示學校名稱欄位的所有資料。
### 練習三:利用 SELECT 選取多個指定欄位
若欲同時選取「學校名稱」(B 欄)、「公/私立」(C 欄)與「電話」(F 欄),語法如下:
```
=QUERY('小學列表'!A:G, "SELECT B, C, F")
```
執行後,輸出結果將依序顯示 B、C、F 三個欄位的資料,且欄位順序完全依照 SELECT 指令的排列。
## 結語
QUERY 函式是 Google 試算表中最具威力與應用彈性的工具之一。透過本文的詳細解析,讀者已經掌握 QUERY 的基本原理、語法結構以及 SELECT 指令的各種應用方式。無論是選取全部欄位、單一欄位,還是多個欄位的排列組合,SELECT 都能夠以直覺且高效的方式完成資料選取任務。
在後續的文章中,我們將繼續深入探討 QUERY 的其他重要指令,如 WHERE(條件篩選)、ORDER BY(排序)、GROUP BY(分組)以及各種彙總函式的應用,協助讀者全面掌握 QUERY 函式的進階技巧。QUERY 確實是資料處理工作中的最佳夥伴,誠摯推薦每一位 Google 試算表使用者深入學習並善加運用。