方格精選

QUERY 函式大解析(一):基本原理與 SELECT

更新於 發佈於 閱讀時間約 10 分鐘
隆重介紹:QUERY 函式!
QUERY 是一個可以對大量資料查詢特定資訊,依據特定篩選條件快速回傳儲存格、欄、範圍的函式。
真的很好用!
這個函式用的語言為所謂的 Google Visualization API Query Language(Google 視覺化 API 搜尋語言),是 Google 開發的一個類似 SQL 搜尋的語言。如果你不曾聽過 SQL 也沒關係,在 Google 試算表上的應用算比較直覺了,不需要很複雜的巢狀語法、也不需要新學很多很多語法。
如果你平常已經在用 SQL 來搜尋、整理資料的話,恭喜你,你的 QUERY 已經學了一大半了;如果你剛從 Excel 轉到 Google 試算表的話,我也非常推薦你從頭開始學這個強力的函式。
我在方格子上寫了一系列使用 QUERY 的教學文章,也歡迎你來看看:

優點

效率快

比起其他讀取資料的方法(如 IMPORTRANGE、直接用「=」參照等),QUERY 的執行時間大多可以在一眨眼間完成,就算有很大的資料,也可以輕易搜尋,效率很好。

維護容易

因為語法直覺,很快就能進行維護,如果需要更改語法也可以很直覺地編輯。

適合資料庫快速搜尋資訊、小型資料庫管理

在工作的時候 QUERY 可以幫助我快速統整資料!特別當資料會在試算表隨時變動的時候,QUERY 也會即時更新資訊,就像一個小型的資料庫一樣。如果只需要快速搜尋到一定的資訊、甚至掛上特定條件,也可以很快運算出來。

缺點

QUERY 輸出結果不能編輯

QUERY 和 FILTER、IMPORTRANGE 這類的函式一樣沒辦法直接對輸出結果編輯,而且如果結果覆蓋到輸出結果的話,會產生錯誤。
如果需要編輯的話,最理想還是可以透過原地貼上來解決、但如果資料筆數很大的話,可能就得再花其他手段來達成編輯的目標(例如下載成 .csv 後再匯入、輸出結果分段原地貼上、利用 QUERY 的 LIMIT 參數分段輸出後、再原地貼上等等)。

資料筆數(算)是有限制的

當搜尋的資料筆數太多,QUERY 就會稍稍變慢、效率就會和資料筆數成反比了,甚至連 Google 試算表本身也都會卡住。這時候可能還是用其他的資料庫軟體比較實在。

QUERY 輸出結果沒有格式

如果你在原本的資料範圍內有設定一些顏色、粗體、斜體、底線、字型等等的格式,QUERY 不會一起把這些設定輸出過來。格式這些東西如果真的有需要,可以用條件化格式稍稍美觀一下,或是等到資料都處理完畢後再來處理。

語法

非常地簡單:
=QUERY(資料, 查詢, [標題])
資料:查詢作業針對的儲存格範圍。
  • 這邊資料範圍有這三種資料格式:布林、數值(包含日期、時間)還有文字。
  • 如果資料範圍內的任一欄內有混合的資料格式,QUERY 會以主要的資料類型進行判斷,次要的資料類型會被視為空值。如果這樣的資料被視為空值的話,資料有可能會失準。
    在進行 QUERY 前最好確保每個欄位的資料格式都是一致、該有的樣子。例如說我有個欄位應該要存放「金額」,資料格式應該是要是數值才對,如果包含其他格式(如布林值、時間)的話就不會被正確讀取到。
查詢:想要查詢的 Google 視覺化 API 語法。
視覺…A…什麼?沒關係,我們會慢慢說明。這邊就是要告訴 QUERY 你要輸出什麼結果、有什麼限制條件等等的參數。這邊的語法是按照這個視覺化 API 語法的文件規範的,整面英文看起來是有點可怕,但今後會一個一個說明!
我們會打出這類的東西:
=QUERY(資料, "SELECT *")
=QUERY(資料, "SELECT * WHERE B = 'Mr. Sheet'")
=QUERY(資料, "SELECT * WHERE B > 10 AND C > 10")
=QUERY(資料, "SELECT A, B, C WHERE G = '台灣'")
這邊也要注意,我們的查詢語法必須要有前後兩個雙引號包好,不然會出錯。
[標題]:資料是否包含標題行。
這個是選填的參數,通常我們只會放 -1、0、1 這三種數字。說明如下:
  • 如果忽略這個引數或設成 -1,QUERY 會根據資料內容自己猜測資料是否包含標題行。
  • 如果是 0,那就是告訴 QUERY 這筆資料沒有標題行。
  • 如果是 1,那就是告訴 QUERY 這筆資料有 1 行標題。

SELECT

你或許有察覺到,在我們剛剛示範的語法內,反覆有「SELECT」這個字眼。這是代表「選取」的意思。SELECT 在 Google 試算表上的意義就是「選取想要的欄位」,告訴 QUERY 函式你想得到什麼結果。如果省略 SELECT 的話,就會回傳全部的欄位,但大多時候還是會很建議把 SELECT 寫上去。

SELECT *

選取全部欄位。

SELECT A

選取資料範圍的 A 欄。
你當然可以用別的字母代替,例如 SELECT A、SELECT B、SELECT C 等。在指定的時候確保你指定的欄位在前面定義的範圍裡。比如說,如果你想要選取 E 欄而打了 SELECT E,但你之前的範圍卻只定義到 D 欄,就會產生錯誤:
=QUERY(Sheet!A:D,"SELECT E") --> 產生錯誤!#ERROR

SELECT A, B, C …

你當然也可以選取兩個以上的欄,並且用逗號分隔。
像是 SELECT A, B, C,就會回傳 A 欄、B 欄、C 欄。要回傳多少欄位是沒有限制的,但也一樣要確保你的欄有在起初定義的範圍內。這邊的 A、B、C 也不一定得按照字母順序排列,你如果希望輸出結果是按 B、C、A 這個順序出現,那就寫 SELECT B, C, A。
SELECT 也可以和其他的彙總參數一起併用,得到範圍的平均、最大值、最小值、總和等等的數字,這個也會在之後另外講解。

練習

接下來,你可以試試看用這個試算表來練習 QUERY。
試著打開一個空白的工作表,做以下的 QUERY:
  1. 利用 SELECT 選取全部的欄位。
  2. 利用 SELECT 選取「學校名稱」。
  3. 利用 SELECT 選取「學校名稱」、「公/私立」、「電話」。
=QUERY('小學列表'!A:G, "SELECT *")
=QUERY('小學列表'!A:G, "SELECT B")
=QUERY('小學列表'!A:G, "SELECT B, C, F")
如何,還 OK 嗎?如果不確定怎麼做的話,也可以看看下面的教學喔!

利用 SELECT 選取全部的欄位

選一個你想要開始顯示結果的儲存格,輸入:
=QUERY(
像是這個樣子:
再來就是定義資料範圍了。在函式還在編輯的狀態下,你可以直接點下面的「小學列表」工作表,再用滑鼠把全部資料選起來。我是以欄為單位選的,所以出現 '小學列表'!A:G:
如果你直接按工作表左上角範圍選取,應該會出現 '小學列表'!1:2635。這也沒關係,QUERY 也讀得到你的資料。
但如果今後你的資料會往下生長(例如又多了新的小學的資料),我比較建議用「欄」的角度去選取,這樣不論資料怎麼更新、或是語法維護上都不必太操心。
如果你想要直接用打的來指定範圍,其實目前為止就是:
=QUERY('小學列表'!A:G
單引號表示工作表名稱,驚嘆號表示參照其他的工作表。
再來,我們就要來用 SELECT 來選取全部的欄位(SELECT 要大寫或是小寫都沒關係)。先打上一個逗點,之後用 SELECT * 來選取全部欄位。別忘了前後要加上雙引號,確定沒問題後就再加上右括號收尾:
=QUERY('小學列表'!A:G, "SELECT *")
痛快按下 Enter,就會看到你的 QUERY 成果:
這邊的 QUERY 結果都是未格式化的文字,儲存格的格式不會跟著過來這裡喔。

利用 SELECT 選取「學校名稱」

接下來,就和上面的方式一樣定義範圍,但要 SELECT 的欄位就不是全部(*)了,而是「小學列表」的 B 欄。語法就會是:
=QUERY('小學列表'!A:G, "SELECT B")
結果就會像這個樣子:

利用 SELECT 選取「學校名稱」、「公/私立」、「電話」

其實也就是同樣的道理了,我們要來取「小學列表」的 B、C、F 欄位。語法就是:
=QUERY('小學列表'!A:G, "SELECT B, C, F")
就會得到下列結果:

以上就是 QUERY 函式的第一部分,原理和 SELECT 的用法!
我們之後還會再推出幾篇,來詳細講解 QUERY 的應用方式。QUERY 真的是我工作的好夥伴,真心推薦大家。
如果你喜歡這次的文章,歡迎你透過這些方法支持我:
・按下愛心、按下儲存
・留言告訴我你的想法
・加入喜特先生的官方沙龍,即時看到我發布的教學
・付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
・追蹤喜特先生的 Facebook
・按這邊小額贊助我的創作!
想要看更多文章,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!
我是喜特先生,Mr. Sheet,我們下個教學見!
avatar-img
14.7K會員
148內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
在POWER QUERY從0到1 #6,就有介紹過資料合併這個功能。 #6 從0到1的POWER QUERY 資料合併 神似VLOOKUP但比他好用100倍 資料合併很神似函數的VLOOKUP,但除了單純以VLOOKUP方式查找合併資料之外,總共有6種不同的合併方式。 用一個簡單的範例來做
Thumbnail
BigQuery 是 Google 推出的無伺服器資料倉儲方案,內建有查詢引擎(類似於 SQL),查詢引擎除了可以方便管理外,也能夠在短時間內對數 TB 的數據進行撈取。相較於其他的資料倉儲解決方案相比,它的成本較低,但如果你的資料量太大有可能成本還是超出你的預期
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
在POWER QUERY從0到1 #6,就有介紹過資料合併這個功能。 #6 從0到1的POWER QUERY 資料合併 神似VLOOKUP但比他好用100倍 資料合併很神似函數的VLOOKUP,但除了單純以VLOOKUP方式查找合併資料之外,總共有6種不同的合併方式。 用一個簡單的範例來做
Thumbnail
BigQuery 是 Google 推出的無伺服器資料倉儲方案,內建有查詢引擎(類似於 SQL),查詢引擎除了可以方便管理外,也能夠在短時間內對數 TB 的數據進行撈取。相較於其他的資料倉儲解決方案相比,它的成本較低,但如果你的資料量太大有可能成本還是超出你的預期
Thumbnail
在Dcard有人求救一個問題:想要將layer與panel的資料提出出來,如下圖。 這個題目是很經典的需求,就是多條件查找,多條件查找有蠻多種不同的解決方法,甚至版本不同解法也是天壤之別哦。 準備動作 在寫函數之前,記得要先觀察一下我們想要提取的資料有什麼樣的規則,可以發現A欄中只
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為