上一篇文章中,我們跟大家介紹基礎 QUERY 函數的應用,包含介紹 SELECT, WHERE 多條件篩選,以及ORDER BY 的用法。
今天的教學會走進階一點的路線,主要會分享聚集函數,像是 SUM (), AVG(), COUNT() 等等,還有介紹 GROUP BY, LIMIT 語法的應用。
如果你對於 QUERY 的基礎應用還不太熟,可以先回上篇文章複習,這樣才可以更快在今天的教學中上手喔!
那麼在正式開始介紹前,你可以點選連結,選擇左上角的檔案 > 建立副本,copy 數據出來一起做練習。
💡 小提醒:本文的教學範例會放在「聚集函數, GROUP BY/ORDER BY/LIMIT 教學」頁面喔!
聚集函數 (Aggregate Function)
什麼是聚集函數 (Aggregate Function)?聚集函數會針對一組值進行計算,並返回單一個值的結果。舉例來說:
- SUM():回傳指定欄位內所有數字總和。
- COUNT():回傳指定欄位內所有含有資料的儲存格數量。
- AVG():回傳指定欄位內所有數字的平均值。
- MAX():回傳指定欄位內最大值。
- MIN():回傳指定欄位內最小值。
以 SUM() 函數來說,它是針對欄位內的值進行加總,最後回傳加總的數字。因此,SUM() 符合上面提到聚集函數的定義。
聚集函數怎麼用
SUM() 範例
這邊我們使用範例數據來解釋 SUM() 的應用。
假設我們想知道各品類 (Category) 對應的總購買金額(Purchase Amount) 該怎麼做?

你當然可以使用試算表的 SUMIF 功能,不過如果想套用 QUERY 的話,你可以寫成:
= QUERY(Raw_data!E:F,"SELECT E, SUM(F) GROUP BY E")
同時會得到以下結果:

你可以得到數據中的四個品類,他們對應的購買金額加總。
看到這裡你可能會覺得奇怪,SELECT 後面出現的 GROUP BY 是什麼意思呢?下面讓我們進一步解釋。
GROUP BY 語句
GROUP BY 顧名思義就是「把資料按照 XXX 分組」。
從上面的例句,”GROUP BY E” 的意思也就是GROUP BY Category (因為Category在E欄),是指把資料按照品類分組。
那麼如果公式中不寫G ROUP BY 會發生什麼事呢?你就會得到 #VALUE! 的結果,如下:

因此,在 QUERY 中使用聚集函數時,大家要記得搭配 GROUP BY 。這樣 QUERY 才知道你希望把資料按照怎樣分組。
GROUP BY 範例
這邊再讓我們看一個聚集函數 & GROUP BY 的使用方法。
假設我們想知道每個商品所對應的平均評分,該怎麼做呢?

你可以寫成:
=QUERY(Raw_data!A:K,"SELECT D, AVG(K) GROUP BY D")
這邊我們想求的是評分的平均值,所以要使用 AVG() 函數,同時使用 GROUP BY 讓資料按照 item 分組,得到的結果如下:

LIMIT 語句
LIMIT 顧名思義就是限制的意思。主要是用來限制資料的筆數,用法十分簡單:
- 限制10筆資料:LIMIT 10
- 限制500筆資料:LIMIT 500
通常會跟著 ORDER BY 一起使用,寫成:ORDER BY A DESC LIMIT 100,時常使用在求前 100 名、求倒數 3 名這樣的使用情境中。
LIMIT 範例
同樣套用上面的範例,這次我們要求前三名商品的平均評分,那麼該怎麼做呢?
我們只要在最後加上一行 LIMIT 3 就可以了。可以寫成:
=QUERY(Raw_data!A:K,"SELECT D, AVG(K) GROUP BY D ORDER BY AVG(K) DESC LIMIT 3")
最終得出的結果如下:

那麼以上是本期文章的內容,如果你有其他問題歡迎來信 themurphymofei@gmail.com 或是留言給我們!
Pingback: 莫非工具 | 文章導覽 - 墨菲莫非
Pingback: 【SQL】資料分組與條件篩選:GROUP BY, HAVING 用法教學 - 墨菲莫非