先前在 Google Sheet 這篇文章中,除了教大家怎麼應用 IMPORTRANGE 函數完成自動化,也提到QUERY 語法來完成更進階的應用。
今天的文章要正式跟大家介紹 QUERY 函數在試算表中的應用,比較不同的是,這次除了提供原數據和教學範例外,也提供了小作業幫大家更快上手。
所以開始之前,你們也可以點選連結,選擇左上角的檔案>建立副本,copy 一份出來跟著練習喔!
QUERY 基本介紹
Google 文件對於 QUERY 的官方解釋是:應用在對多筆資料執行 Google Visualization API Query Language (Google 視覺化 API 語法)查詢作業。
這是什麼意思呢?簡單來說,QUERY 函數能對大量資料查詢特定資訊,並依據篩選條件回傳資料。
另外,QUERY 函數的用法與SQL 語言十分相似!如果你學過SQL很容易就能上手,不過沒使用過 SQL 的人也沒關係,看完今天的文章一樣能掌握到 QUERY 的技巧喔。
QUERY 語法
QUERY 的語法如下:
=QUERY(資料, 查詢, [標題])
下面我們一一解釋各欄位的意思:
- 資料:放入要查詢作業的儲存格範圍
- 查詢:放入要查詢的 Google 視覺化 API 語法。聽起來很複雜?這邊我們會用引號寫出像是 SQL 語言內容,比如 “SELECT *” 或是 “SELECT * WHERE A = 0″,下面會進一步舉例幫助大家更好理解。
- 標題:可以忽略或是放入選填的參數 -1, 0, 1。解釋如下:
- 忽略或是 -1 :QUERY 會自己判斷資料是否包含標題行
- 0:表示這筆資料沒有標題行。
- 1:表示這筆資料有 1 行標題
SELECT 怎麼用
在進入範例之前,想先跟大家聊聊在「查詢」的欄位中所提到的 “SELECT” 究竟是什麼意思?由於 “SELECT” 這個字眼在你使用 QUERY 函數時絕對會高頻率地出現,所以這裡我們要詳細的解釋。
SELECT 顧名思義是「選取」的意思,那麼我們要選取什麼呢?以下是常見的幾種應用:
- 選取全部資料:”SELECT *”
- 選取 A 欄位:”SELECT A”
- 選取 A~D 欄位:”SELECT A:D”
- 選取 A, D 欄位:”SELECT A, D”
SELECT 範例
範例是消費者的購買資料。如果我們想篩選 Customer ID, Category 該怎麼做呢?
範例可以從連結中獲取練習喔:點我獲取範例資料
根據上面提到的結構:QUERY(資料, 查詢, [標題])。
在「資料」我們輸入 Raw_data 分頁中所有的資料(Raw_data!1:3901),接著在「查詢」中放入Customer ID, Category 所在的欄位,分別是 A 與 E 欄。完整的公式如下:
=QUERY(Raw_data!1:3901,"SELECT A, E")
我們在 A4 儲存格中輸入上面的公式,再按下E nter,會跑出下面結果:
WHERE 怎麼用
學會了基礎的 SELECT 語句,接下來要教大家另一個實用的語句 WHERE。在你使用 SELECT 指定想選取的資料範圍後,WHERE 可以幫你指定搜尋條件。
這邊我們同樣用上面消費者購買數據講解。
WHERE 範例
如果你想篩選年齡 (Age)> 30 歲且性別 (Gender) 為女性的消費者 ID(Customer ID)、年齡、性別該怎麼做呢?
你當然可以使用 Google Sheet 篩選器,不過應用 QUERY 函數的好處是可以更有效率,且把篩選出的資料變成另一個小型資料庫。
套用上面 QUERY 語法,可以寫下:
=QUERY(Raw_data!A:C,"SELECT * WHERE B > 30 AND C = 'Female'")
你可以看到在 WHERE 語句中:
- 年齡大於 30 歲對應到: B > 30
- 性別為女性對應到:C = ‘Female’
其中 B 跟 C 分別代表的欄位就是 SELECT 中所選取的年齡&性別。
接著會得到以下輸出結果:
WHERE 常用條件
除了大於、小於、等於之外,下面幾項也是時常搭配 WHERE 使用的條件。
- 不等於:WHERE A <> 100, WHERE A != 100 (不等於用<>, !=這兩種寫法都可以)
- 為空白:WHERE A IS NULL
- 不為空白:WHERE A IS NOT NULL
ORDER BY 怎麼用
接下來要跟大家介紹 ORDER BY 語句的應用。ORDER BY 的意思是將某欄位按照遞增/遞減排序,通常會跟著 GROUP BY 一起使用。
- 遞增排序:ORDER BY A ASC,如果是數字會由小到大;字母則 A~Z 排序
- 遞減排序:ORDER BY A DESC。如果是數字會由大到小;字母則從 Z~A 排序
- 預設排序:ORDER BY A。預設為遞增排序
通常我們在遞增排序中不會寫出ASC(因為是預設),希望結果按照遞減排序時再寫出DESC就可以囉。
ORDER BY 範例
以上面同樣的範例,假設我們想求年齡 (Age)> 30 歲且性別 (Gender) 為女性的消費者 ID(Customer ID)、年齡、性別,不過這次要按照年齡由大到小排序,該怎麼做呢?
你可以寫成:
=QUERY(Raw_data!A:C,"SELECT * WHERE B > 30 AND C = 'Female' ORDER BY B DESC")
由於我們想按照年齡排序,所以是 ORDER BY B(年齡在B欄位),另外得是由大到小的遞減方式,所以是DESC。
得出的結果如下圖:
你會發現年齡最大的消費者為 70 歲,且由大到小進行排序。
小作業練習
作業1:篩選 Customer ID, Location, Size, Color 欄位
作業2:篩選購買金額超過 90 USD,且購買品項不包含 Shoes 的所有數據
作業3:篩選女性顧客 ID、居住區域 (Location)、購買商品,只篩選購買頻率為”每週”的顧客,並按評分高到低排序
大家可以到「作業解答」分頁查看答案,公式會放在有標黃的格子裡。如果有其他問題也歡迎來信或是底下留言跟我說喔!
Pingback: 【Google Sheet】一次搞懂IMPORTRANGE函數+QUERY,自動化Google試算表 - 墨菲莫非
Pingback: 莫非工具 | 文章導覽 - 墨菲莫非
Pingback: 【Google Sheet】QUERY查詢,用聚集函數做統計、分類(SUM, GROUP BY, LIMIT應用) - 墨菲莫非
請問老師下語法測了好久哪裡有錯呢?
=QUERY(“Driver={SQL Server};Server=DESKTOP-6C7IA6F\SQLEXPRESS,1433;Database=stock02;Uid=sa;Pwd=sa”,”SELECT * FROM Customer”)
Hi Daniel,
想請問您,是不是想要用 Google Sheets 去訪問自己的資料庫?
QUERY 函數是用於,在 Google Sheets 中的資料查詢,並不支援直接連接到 SQL Server 資料庫執行查詢。
這裡有兩個解決方法給您參考:
1.安裝可以連結到 SQL Server 的擴充功能
2.使用 Google Apps Script可以自己寫腳本去連接到對應的資料庫:「JDBC」
有其他問題任何問題歡迎在「表單」提問