QUERY 函式大解析(五):PIVOT 給你一雙透視眼

更新於 發佈於 閱讀時間約 9 分鐘

終於邁入了 QUERY 系列的第五篇文章了!到這你可以說是很厲害的 QUERY 大師,能把一大筆資料玩弄在手掌心了。這次要介紹的是 QUERY 系列文的最後一個大語法:PIVOT,讓你可以更進一步切入分析 SELECT 出來的資訊。

在開始之前,我會建議你先看過前一篇 QUERY 函式大解析(四):進階 SELECT、GROUP BY,了解聚集函數(Sum、Avg、Count、Max、Min)和 GROUP BY 的使用規則再回來試做,會更有概念。

如果還沒看過 QUERY 是什麼,還不知道 QUERY 強大的威力在哪的話,我在方格子上寫了一系列使用 QUERY 的教學文章,也歡迎你來看看:

QUERY 函式大解析,系列文索引


所以 PIVOT 是什麼?

PIVOT 原意是「扭轉」、「樞紐」、「中樞」的意思,你也可以看成一雙透視眼鏡,可以透過 PIVOT 看到聚集 SELECT 內的細部資訊,並且可以指定用某欄位來切割視角

PIVOT 的應用範圍也很廣,可以用它來做圖表、快速取得聚集資訊、效果跟資料透視表(pivot table)很接近!

這邊放上這次範例出現的試算表給大家複製,歡迎取用~

例如說我現在有這樣的一筆員工資料:

raw-image

如果今天我想要知道 F 欄的所有公司裡,所有員工的平均薪資的話,我可以做:

=QUERY(A:F, "SELECT F, AVG(E) GROUP BY F")

我就會得到:

raw-image

但如果今天還想再從部門、年齡區間切入,取得平均薪資(avg 薪水)的資訊,還可以怎麼做呢?這就是 PIVOT 可以進一步做的事了。

像是這是以部門的視角切入透視,得到的資訊:

raw-image

再來,以年齡區間的視角切入透視,得到的的資訊:

raw-image

是不是很像我們熟悉的資料透視表(pivot table)?馬上來看看怎麼做吧!



語法

PIVOT 的語法其實很單純,如下:

=QUERY(資料, "SELECT 聚集函數(##) PIVOT ####")

## 代表欄位字母。所以如果你想要以A欄的視角,透視 B 欄的總和,就會是:

=QUERY(資料, "SELECT SUM(B) PIVOT A")

以我們剛剛的員工資料表為例:

raw-image

如果想知道各個公司的平均薪資,那就是:AVG(薪水)、PIVOT 公司。也就是:

=QUERY(A:F, "SELECT AVG(E) PIVOT F")

執行結果就會是:

raw-image

其實執行結果跟 GROUP BY 差不多,只是表格方向有一點不太一樣就是了。跟 GROUP BY 的語法和執行結果比較一下:

=QUERY(A:F, "SELECT F, AVG(E) GROUP BY F")
raw-image

其實計算結果相同,都 OK 的!如果你用了 PIVOT,比較喜歡把公司資訊放在一欄、平均薪水放在另一欄,你可以在 QUERY 前面都加一個 TRANSPOSE 函式,把行轉換成欄、欄轉換成行:

=TRANSPOSE(QUERY(A:F, "SELECT AVG(E) PIVOT F"))

就會得到:

raw-image

對聚集函數透視!

接下來就是本篇的重點:對聚集函數(Sum、Avg、Count、Max、Min)做透視。其實語法也很單純,就是要記得把 PIVOT 放在 GROUP BY 後面就是了。

=QUERY(A:F,"SELECT 首欄 ##, AGG(##), ... GROUP BY ## PIVOT ###")

(AGG(##) 代表聚集函數,請自由代換;# 代表欄位字母)

這邊欄位字母變多了,該要填什麼才好呢?先釐清一下各個語法的欄位意義到底是什麼吧。假如手上有一份資料長這樣:

raw-image

你可以用班級或是性別來作為切入視角,去透視期末考總分的不同樣貌。那麼:

  • 首欄 ##:GROUP BY 的標題欄位,GROUP BY 寫什麼欄位這邊就寫什麼。填這個會顯示出 GROUP BY 分組的標題和分組內容,如果不寫的話,就會沒有標題。
  • AGG(##):你要執行聚集函數(SUM、AVG、COUNT、MAX、MIN)。你的資料的 C 欄有某考試的總分,那你就可以用 AVG (C) 取得 C 欄的平均,也就是某考試的平均分數。
  • GROUP BY ##:你希望你的聚集函數結果以「##」為分組、且組別會出現在「同一欄」上的意思。我想要看到 C 欄某考試的全校平均分數、還要看到各個班(B 欄)的班平均,那就會用 GROUP BY B 來分組。
    順帶一提,第一個 ## 的部分也會填 B 喔!也就是 B, AVG (C) GROUP BY B
  • PIVOT ##:在 GROUP BY 的組別裡面,再用「##」為視角切入來查詢資訊,且這視角的名稱會出現在「同一列」上。再接著上面的例子,我想要知道各個班級內男女之間的平均總分數,所以我的角度就是 D 欄的性別了,所以我就會寫 PIVOT D

簡單說,GROUP BY 的資料會出現在同一欄上、PIVOT 則是同一列上。

我們回到這篇文章開頭的例子,再附上要查詢的 QUERY 的資料:

raw-image

假設我們今天要找的是,各公司裡各部門的平均薪資。如果你覺得有點難判斷要下什麼欄位字母,我們按照剛剛的思路走:

  • 首欄 ##:GROUP BY 的標題欄位,GROUP BY 寫什麼欄位這邊就寫什麼。
    ➡️ 嗯,還不知道,先空著。
  • AGG(##):執行聚集函數。
    ➡️ 我要找平均薪資,所以就是 AVG(E)。
  • GROUP BY ##:聚集函數結果以「##」為分組,組別在同一欄
    ➡️ 我想要以公司作為分組,所以是 GROUP BY F。
    ➡️ 所以首欄就是 F。
  • PIVOT ##:在 GROUP BY 的組別裡面,再用「##」為角度切入來查詢資訊,且這視角會出現在「同一列」上
    ➡️ 我要進一步用部門來切入取得資訊,所以是 PIVOT B。

用神秘拼裝魔法湊起來就會得到:

=QUERY(A:F,"SELECT F, AVG(E) GROUP BY F PIVOT B")

結果如下:

raw-image

搞定!⎝( OωO)⎠


試試看第二個角度,用年齡區間來切入查詢資訊吧:

raw-image

要找的是,各個公司裡各個年齡區間的平均薪資:

  • 首欄 ##:GROUP BY 的標題欄位,GROUP BY 寫什麼欄位這邊就寫什麼。
    ➡️ 嗯,還不知道,還是先空著。
  • AGG(##):執行總和、平均、含有資料的儲存格個數、最大值、最小值的欄位。 ➡️ 我要找平均薪資,所以就是 AVG(E)。
  • GROUP BY ##:聚集函數結果以「##」為分組,組別在同一欄
    ➡️ 我想要以公司作為分組,所以是 GROUP BY F。
    ➡️ 所以首欄就是 F。
  • PIVOT ##:在 GROUP BY 的組別裡面,再用「##」為角度切入來查詢資訊,且這視角會出現在「同一列」上
    ➡️ 我要進一步用年齡層區間來切入取得資訊,所以是 PIVOT D。

拼拼裝裝就會得到這個語法:

=QUERY(A:F,"SELECT F, AVG(E) GROUP BY F PIVOT D")

結果就會是!

raw-image

最後小叮嚀

我們當然可以用其他的語法跟 PIVOT 的搜尋結果互動,例如再進一步用 WHERE 去限縮條件、用 LIMIT 指定輸出行數、用 ORDER BY、用 OFFSET 都可以。但是記得,順序要寫對!Google QUERY 對於語法的順序比較嚴格,必須要按照下面的順序來寫:

SELECT / WHERE / GROUP BY / PIVOT / ORDER BY / LIMIT / OFFSET / LABEL

如果不照上面的順序寫的話,QUERY 會直接跑不出結果!

以上就是 PIVOT 的教學了。QUERY 已經幾乎被我們看完囉!要下字母的時候往往會猶豫一下,但是對自己有耐心、照著思路慢慢想的話,應該都會沒問題的!

直接做資料透視表(Pivot Table)也是個好方法,但表太多的話,也會讓整個工作表的載入效率變低,這時候 PIVOT 就是個很方便的選擇!(灬ºωº灬)


如果你喜歡這次的文章,歡迎你透過這些方法支持我:
・按下愛心、按下儲存
・留言告訴我你的想法
・加入喜特先生的官方沙龍,即時看到我發布的教學
・付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
・追蹤喜特先生的 Facebook
・按這邊小額贊助我的創作!

想要看更多文章,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!

我是喜特先生,Mr. Sheet,我們下個教學見!



留言
avatar-img
留言分享你的想法!
喜特先生 Mr. Sheet -avatar-img
發文者
2024/01/30
QUERY 函式大解析,系列文索引提及了這篇文章,趕快過去看看吧!
avatar-img
喜特先生官方沙龍
20.0K會員
153內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
2025/04/20
請你試著在 Google 試算表的儲存格上打這個,按下 Enter: =WHATTHEFOXSAY() 會有神奇的事情發生喔 ✨
Thumbnail
2025/04/20
請你試著在 Google 試算表的儲存格上打這個,按下 Enter: =WHATTHEFOXSAY() 會有神奇的事情發生喔 ✨
Thumbnail
2024/06/02
上次介紹了 REPLACE 函式,可以用來取代儲存格內的特定文字。其實我們還有一個相似的函式叫 SUBSTITUTE,也有取代的功能,不過當然有一點不一樣的地方!今天會分享語法的範例,還有跟 REPLACE 的差異在哪。一起來看看!
Thumbnail
2024/06/02
上次介紹了 REPLACE 函式,可以用來取代儲存格內的特定文字。其實我們還有一個相似的函式叫 SUBSTITUTE,也有取代的功能,不過當然有一點不一樣的地方!今天會分享語法的範例,還有跟 REPLACE 的差異在哪。一起來看看!
Thumbnail
2024/05/25
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
2024/05/25
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
看更多
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
分組依據是POWER QUERY將資料統計分析的一個功能,神似EXCEL函數的SUMIF與COUNTIF,不過他的使用上更加的方便與靈活,不需要寫函數也能將多條件、多結果的統計分析迅速呈現。 如下圖例子,要將左邊資料統計分析為右邊多種種結果,用POWER QUERY只要滑鼠點幾下,數據結果馬上
Thumbnail
分組依據是POWER QUERY將資料統計分析的一個功能,神似EXCEL函數的SUMIF與COUNTIF,不過他的使用上更加的方便與靈活,不需要寫函數也能將多條件、多結果的統計分析迅速呈現。 如下圖例子,要將左邊資料統計分析為右邊多種種結果,用POWER QUERY只要滑鼠點幾下,數據結果馬上
Thumbnail
POWER QUERY取得資料的方式五花八門,使用正確的方式匯入資料,可以讓資料取得與處理事半功倍哦 從表格/範圍 從檔案 從資料夾 從文字檔 從網頁 從GOOGLE SHEET 📌影片教學 直接看影片教學把各種不同抓取資料的方式學起來吧,觀看教學影片前可以
Thumbnail
POWER QUERY取得資料的方式五花八門,使用正確的方式匯入資料,可以讓資料取得與處理事半功倍哦 從表格/範圍 從檔案 從資料夾 從文字檔 從網頁 從GOOGLE SHEET 📌影片教學 直接看影片教學把各種不同抓取資料的方式學起來吧,觀看教學影片前可以
Thumbnail
聚合函數 可以對資料的筆數、平均、最大、最小和加總的運算,提供查詢結果:如下表示: COUNT(Column):計算筆數,「*」是統計紀錄數。 AVG(Column):計算欄位平均值。 MAX(Column):計算欄位最大值。 MIN(Column):計算欄位最小值。 SUM(Colum
Thumbnail
聚合函數 可以對資料的筆數、平均、最大、最小和加總的運算,提供查詢結果:如下表示: COUNT(Column):計算筆數,「*」是統計紀錄數。 AVG(Column):計算欄位平均值。 MAX(Column):計算欄位最大值。 MIN(Column):計算欄位最小值。 SUM(Colum
Thumbnail
先來看一下成果展示 今天有粉絲提出一個問題,一個儲存格中有很多行資料,要依據換行符號將所有內容橫向展開。 這個需求有許多種解法 函數解: =TRIM(MID(SUBSTITUTE(B5,CHAR(10),REPT(" ",100)),SEQUENCE(,10,1,100),100)) 對於函數很熟悉
Thumbnail
先來看一下成果展示 今天有粉絲提出一個問題,一個儲存格中有很多行資料,要依據換行符號將所有內容橫向展開。 這個需求有許多種解法 函數解: =TRIM(MID(SUBSTITUTE(B5,CHAR(10),REPT(" ",100)),SEQUENCE(,10,1,100),100)) 對於函數很熟悉
Thumbnail
你知道 SELECT 除了回傳欄位、使用聚集函數外,還可以更進一步做加減乘除喔!這個系列是 QUERY 函式大解析的第六篇文章,如果還不知道什麼是 QUERY 的話,我還是很建議你從第一篇慢慢看、跟著我們的練習實際操作,就會更有概念囉~
Thumbnail
你知道 SELECT 除了回傳欄位、使用聚集函數外,還可以更進一步做加減乘除喔!這個系列是 QUERY 函式大解析的第六篇文章,如果還不知道什麼是 QUERY 的話,我還是很建議你從第一篇慢慢看、跟著我們的練習實際操作,就會更有概念囉~
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News