【Google Sheet】QUERY 多條件查詢:SELECT, WHERE, ORDER BY 語法應用

  • Post author:
Home » 莫非工具 » Google Sheets » 【Google Sheet】QUERY 多條件查詢:SELECT, WHERE, ORDER BY 語法應用

先前在 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)、購買商品,只篩選購買頻率為”每週”的顧客,並按評分高到低排序

大家可以到「作業解答」分頁查看答案,公式會放在有標黃的格子裡。如果有其他問題也歡迎來信或是底下留言跟我說喔!

Murphy

我是Murphy,是一名職場人。這裡主要分享職場問題、職場話題、求職資訊,還有那些我所熱愛的事物。

This Post Has 5 Comments

  1. DanielZhong

    請問老師下語法測了好久哪裡有錯呢?
    =QUERY(“Driver={SQL Server};Server=DESKTOP-6C7IA6F\SQLEXPRESS,1433;Database=stock02;Uid=sa;Pwd=sa”,”SELECT * FROM Customer”)

    1. Mr. Y

      Hi Daniel,

      想請問您,是不是想要用 Google Sheets 去訪問自己的資料庫?
      QUERY 函數是用於,在 Google Sheets 中的資料查詢,並不支援直接連接到 SQL Server 資料庫執行查詢。

      這裡有兩個解決方法給您參考:
      1.安裝可以連結到 SQL Server 的擴充功能
      2.使用 Google Apps Script可以自己寫腳本去連接到對應的資料庫:「JDBC

      有其他問題任何問題歡迎在「表單」提問

歡迎留言,與我們分享你的看法!