QUERY 函式大解析(十四):子查詢①篩選聚集結果

閱讀時間約 6 分鐘

這邊有一張表格,有員工的姓名、部門、年齡、薪水、公司的資料:

raw-image

在這個表格裡,我想找「薪水在高於平均值的員工」有哪些,可以怎麼找呢?或許你有閃過這樣的寫法:

=QUERY(A:E, "SELECT * WHERE D > AVG(D)")

但是這樣會回傳錯誤,因為 AVG(D) 這樣的聚集函數沒辦法出現在 WHERE 語句裡面。

那還可以怎麼寫呢?如果是在 SQL 上,你可以用 HAVING 來完成,用它對聚集函數的結果進行篩選。可惜 QUERY 沒有 HAVING 這個方法,那還可以怎麼解決呢?

我想要介紹一個新東西,叫做子查詢(Subquery)




子查詢(Subquery)

以 Google 試算表的 QUERY 角度來看,子查詢就是 QUERY 裡面再包著一個或多個 QUERY我們通常會把開頭的等號(=)後的 QUERY 叫做主查詢,在 QUERY 裡面存在的 QUERY 叫做子查詢。

我們可以用子查詢來篩選、計算聚集(加總、平均、數量等)、從其他表格查詢資料來幫助現在的 QUERY,解鎖更多查詢的可能性!

QUERY,我們通常會把子查詢放在兩個地方。

  • WHERE 中使用(第四行~第五行):
=QUERY(資料,
"SELECT ...
WHERE A > "
& QUERY(資料,
"QUERY 語句​") &
"")

當你想要以子查詢的結果作為 WHERE 的條件,就用這個!

要注意這種子查詢會用到 & 來連結,讓 WHERE 跟第二個 QUERY 的結果接在一起。你可以回到這邊複習一下 & 的用法:QUERY 函式大解析(九):與儲存格連動


  • 當作主查詢的表格使用(第二行~第五行):
=QUERY(
QUERY(A:D,
"SELECT ...
WHERE ...
..."),
"SELECT Col1, Col2, Col3 ...
WHERE ...
...")

當你想要先用子查詢做一個表格給主查詢用,就用這個!

這種子查詢則是不需要用 &,但是主查詢的時候要用 Col# 取代欄位字母,像是第一欄就是 Col1、第二欄就是 Col2、第三欄就是 Col3,以此類推。

不過這邊提到的使用時機只是一個參考,你可以看看自己的需求,再衡量要用哪一個方法來做子查詢。卡住的話也歡迎問喜特先生喔✨




對聚集結果篩選

好,回到一開始提到的題目。歡迎來這邊複製一份試算表,一起來練習!

在這個表格裡,我想找「薪水在高於平均值的員工」有哪些:

raw-image

這邊我想用第一個方法(把子查詢放在 WHERE 後面)比較符合我的需求。我目前想到的是:

=QUERY('員工資料'!A:E,
"SELECT *
WHERE D >= 平均值")

(寫 QUERY 的時候,可以善用 Ctrl/Cmd + Enter 來換行喔)

這樣應該就可以得到答案了。不過這邊的「平均值」要怎麼求?我們可以先在「子查詢」的工作表,用 QUERY 求平均值,也就是:

=QUERY('員工資料'!A:E,
"SELECT AVG(D)")

來看看結果:

raw-image

對,雖然得到數字了,不過第一列有個標題列,如果直接拿這個結果去跟主查詢接在一起的話,會產生錯誤,因為主查詢的 QUERY 會變成這樣:

=QUERY('員工資料'!A:E,
"SELECT *
WHERE D >= avg 薪水 65918.36735")

avg 薪水 65918.36735」,文字跟數字混在一起了。


那怎麼把標題列拿掉?很簡單,我們可以再用 LABEL 語句,強制把「avg 薪水」變成空白。回到我們在工作表上寫的子查詢 QUERY,稍稍更改一下:

=QUERY('員工資料'!A:E,
"SELECT AVG(D)
LABEL AVG(D) ''"

讚,標題列不見啦!

raw-image


再來把它跟主查詢用 & 接起來就可以了。

=QUERY('員工資料'!A:E,
"SELECT *
WHERE D >= "
& QUERY('員工資料'!A:E,
"SELECT AVG(D)
LABEL AVG(D) ''")
& "")
raw-image


當然,你也可以繼續編輯主查詢。

比如說,我做了一個簡易的資料透視表,找到各個公司裡,各個部門超過平均值薪水的員工個數:

=QUERY('員工資料'!A:E,
"SELECT B, COUNT(A)
WHERE D >= "
& QUERY('員工資料'!A:E,
"SELECT AVG(D)
LABEL AVG(D) ''")
& "GROUP BY B
PIVOT E")
raw-image




替代方案

如果你覺得子查詢有點複雜不好用,你也可以先在別的儲存格,先用 AVERAGE 函式算 D 欄的平均值是多少,然後再用 & 連接起來也是一招。我在「替代方案」工作表也做了一個範例,供你參考:

raw-image




如果你喜歡這次的文章,歡迎你透過這些方法支持我:

  • 按下愛心、按下儲存
  • 留言告訴我你的想法
  • 加入喜特先生的官方沙龍,即時看到我發布的教學
  • 付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
  • 追蹤喜特先生的 Facebook
  • 這邊小額贊助我的創作!

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

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



12.5K會員
147內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
發表第一個留言支持創作者!
喜特先生官方沙龍 的其他內容
接續著上次提到的 COUNT、COUNTA,我們再稍稍延伸一點,把 COUNT 函式的家族補完,介紹最後的兩名成員:COUNTUNIQUE 跟 COUNTBLANK。
這是「按條件算OO」系列文的第五篇教學!今天會來聊聊 MINIFS。
這是「按條件算OO」系列文的第四篇教學!今天會來聊聊 MAXIFS。
這是「按條件算OO」系列文的第二篇教學!今天會來聊聊 COUNTIF、COUNTIFS 和 COUNTUNIQUEIFS。
延伸 MATCHES「|」的 OR 字元應用,我們還可以讓它跟工作表內的範圍做連動,做出更彈性的 QUERY。一起來看看怎麼做吧!
在用 QUERY 查詢資料時,你曾遇過在 WHERE 寫很多個 OR 的狀況嗎?有個更簡單好用的寫法推薦給你,來瞧瞧!
接續著上次提到的 COUNT、COUNTA,我們再稍稍延伸一點,把 COUNT 函式的家族補完,介紹最後的兩名成員:COUNTUNIQUE 跟 COUNTBLANK。
這是「按條件算OO」系列文的第五篇教學!今天會來聊聊 MINIFS。
這是「按條件算OO」系列文的第四篇教學!今天會來聊聊 MAXIFS。
這是「按條件算OO」系列文的第二篇教學!今天會來聊聊 COUNTIF、COUNTIFS 和 COUNTUNIQUEIFS。
延伸 MATCHES「|」的 OR 字元應用,我們還可以讓它跟工作表內的範圍做連動,做出更彈性的 QUERY。一起來看看怎麼做吧!
在用 QUERY 查詢資料時,你曾遇過在 WHERE 寫很多個 OR 的狀況嗎?有個更簡單好用的寫法推薦給你,來瞧瞧!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
日前在LINE社群,有網友提出一個問題,要把資料進行分析,用日期來計算出將對應的資料。 原始資料,密密麻麻的數據,都看不清楚了 放大一點點 要把這些資料不同『料號』的各種『狀態』依據『日期』進行分析。 有興趣可以下載試著挑戰看看:檔案下載 作法有很多種,當然也可以用函數處
Thumbnail
📌附加與合併差異 POWER QUERY附加的另一個好朋友就是資料合併,來了解一下這兩個功能的差異。 附加 就是把多個資料來源,資料中相同標題的資料往下疊加結合再一起 合併 依據某一欄(PQ稱為資料行)的內容作為關鍵字,將其他資料來源依據相同的關鍵字把資料整合再一起。 有沒有發
Thumbnail
資料處理中日期格式是一定會遇到的一個課題,而在台灣日期又有民國年與西元年,很不幸的在EXCEL上,日期有它自己的標準設定模式,YYYY/MM/DD,如果不是依照這種格式進行輸入,那個日期就是僅供觀看不能進行任何計算。 延伸閱讀:EXCEL日期正確的輸入方式,與常見錯誤之日期格式輸入 而不盡少數的
Media query可以很複雜,但是這裡KP只談最簡單、最實用的基礎。
Thumbnail
稍微複雜一點的 query 其實代表著某些商業邏輯,若把這一段程式放到 repository 的實作層,會變成這些商業邏輯被隱藏起來了,如果有個好的描述語言,我倒覺得很好讀,也可以清楚知道背後的商業邏輯是什麼,是很好的一件事。
Thumbnail
POWER QUERY這個功能從EXCEL2016之後就內建EXCEL軟體中了,跟函數相比有涉略PQWER QUERY的人相對少很多,網路中文的相關資源也是。 但其實POWER QUERY相較於EXCEL的函數與VBA是更加容易上手的,他有完善的使用者介面,絕大部分的需求只需要滑鼠點一點就能達成,
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
資料形態一個申請日期中有多個聯絡人與相對應的MAIL,而且聯絡人都是放在同一個儲存格中並且以逗號分隔,MAIL亦同,這樣要如何把聯絡人與MAIL拆分成一個聯絡人一列的資料呢? 不囉嗦我們先來看成果,檔案下載(點我) 這麼方便的效果怎麼做的呢?其實用POWER QUERY完全不用寫任何程式就能完成了,
Thumbnail
先來看看最終成果 檔案下載,點我~ 以月分+部門進行分析的資料,無法直接用圖表繪製出以月分累加的折線圖,必須靠函數輔助才有辦法達成 其實POWER QUERY可以快速處理這個問題,而且未來數據新增時,只要點一下重新整理就能快速完成是不是超棒的! 現在就來看教學吧,2分鐘學起來~~~ 覺得分享有幫助到
Thumbnail
先來看一下成果展示 今天有粉絲提出一個問題,一個儲存格中有很多行資料,要依據換行符號將所有內容橫向展開。 這個需求有許多種解法 函數解: =TRIM(MID(SUBSTITUTE(B5,CHAR(10),REPT(" ",100)),SEQUENCE(,10,1,100),100)) 對於函數很熟悉
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
日前在LINE社群,有網友提出一個問題,要把資料進行分析,用日期來計算出將對應的資料。 原始資料,密密麻麻的數據,都看不清楚了 放大一點點 要把這些資料不同『料號』的各種『狀態』依據『日期』進行分析。 有興趣可以下載試著挑戰看看:檔案下載 作法有很多種,當然也可以用函數處
Thumbnail
📌附加與合併差異 POWER QUERY附加的另一個好朋友就是資料合併,來了解一下這兩個功能的差異。 附加 就是把多個資料來源,資料中相同標題的資料往下疊加結合再一起 合併 依據某一欄(PQ稱為資料行)的內容作為關鍵字,將其他資料來源依據相同的關鍵字把資料整合再一起。 有沒有發
Thumbnail
資料處理中日期格式是一定會遇到的一個課題,而在台灣日期又有民國年與西元年,很不幸的在EXCEL上,日期有它自己的標準設定模式,YYYY/MM/DD,如果不是依照這種格式進行輸入,那個日期就是僅供觀看不能進行任何計算。 延伸閱讀:EXCEL日期正確的輸入方式,與常見錯誤之日期格式輸入 而不盡少數的
Media query可以很複雜,但是這裡KP只談最簡單、最實用的基礎。
Thumbnail
稍微複雜一點的 query 其實代表著某些商業邏輯,若把這一段程式放到 repository 的實作層,會變成這些商業邏輯被隱藏起來了,如果有個好的描述語言,我倒覺得很好讀,也可以清楚知道背後的商業邏輯是什麼,是很好的一件事。
Thumbnail
POWER QUERY這個功能從EXCEL2016之後就內建EXCEL軟體中了,跟函數相比有涉略PQWER QUERY的人相對少很多,網路中文的相關資源也是。 但其實POWER QUERY相較於EXCEL的函數與VBA是更加容易上手的,他有完善的使用者介面,絕大部分的需求只需要滑鼠點一點就能達成,
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
資料形態一個申請日期中有多個聯絡人與相對應的MAIL,而且聯絡人都是放在同一個儲存格中並且以逗號分隔,MAIL亦同,這樣要如何把聯絡人與MAIL拆分成一個聯絡人一列的資料呢? 不囉嗦我們先來看成果,檔案下載(點我) 這麼方便的效果怎麼做的呢?其實用POWER QUERY完全不用寫任何程式就能完成了,
Thumbnail
先來看看最終成果 檔案下載,點我~ 以月分+部門進行分析的資料,無法直接用圖表繪製出以月分累加的折線圖,必須靠函數輔助才有辦法達成 其實POWER QUERY可以快速處理這個問題,而且未來數據新增時,只要點一下重新整理就能快速完成是不是超棒的! 現在就來看教學吧,2分鐘學起來~~~ 覺得分享有幫助到
Thumbnail
先來看一下成果展示 今天有粉絲提出一個問題,一個儲存格中有很多行資料,要依據換行符號將所有內容橫向展開。 這個需求有許多種解法 函數解: =TRIM(MID(SUBSTITUTE(B5,CHAR(10),REPT(" ",100)),SEQUENCE(,10,1,100),100)) 對於函數很熟悉