跳到主要內容跳到頁尾

QUERY 基礎:select、where、order by、limit 四句就能查資料

8 分鐘閱讀Lv.3 中級摘要與日期

從一張訂單表開始,學 QUERY 的查詢語言:select 選欄位、where 設條件、order by 排序、limit 取前幾筆,以及欄位代號 A、B 與 Col1 的差別、文字條件的引號和 headers 參數。

發布 更新

文章目錄

這篇是 QUERY 的第一篇教學。QUERY 可以用一小段像 SQL 的文字,一次完成「只留這幾欄、只要符合條件的列、再排好順序」。

先看看這張飲料店的訂單表,一共 12 筆,放在 A1:E13:

日期品項杯數金額通路
2026/03/03蘋果紅茶12540店內
2026/03/05青茶7245外送
2026/03/09蘋果紅茶5235外送
2026/03/14烏龍奶茶9441店內
2026/03/21青茶14476店內
2026/04/02蘋果紅茶8376店內
2026/04/06烏龍奶茶6306外送
2026/04/11青茶11396店內
2026/04/18蘋果紅茶13598外送
2026/04/27烏龍奶茶4204店內
2026/05/04青茶10360外送
2026/05/16蘋果紅茶7329店內

我想找「一次買 10 杯以上的訂單」,只看日期、品項、杯數三欄。用眼睛掃的話,要一列一列看杯數,再把三欄手動抄出來。12 列還撐得住,換成 1,200 列就不太想做了,這時候可以把 QUERY 派上場。

QUERY

QUERY 會對一個範圍下一段查詢語句,把符合的結果整理成一張新表。

語法

  • 資料:要查詢的範圍,例如 A1:E13。
  • 查詢:用雙引號包起來的查詢語句,也可以放在別的儲存格再參照。
  • 標題列數(選填):資料最上面有幾列是標題。不填的話,試算表會自己從內容猜。

查詢語句用的是 Google Visualization API Query Language,語法跟 SQL 很像,但沒學過 SQL 也完全沒問題。一句查詢是由好幾個子句照固定順序接起來的:select、where、group by、pivot、order by、limit、offset、label、format。每個都可以省略,這篇先講最常用的四個。順序寫反會出錯,所以先記一下:select 在最前面,where 在後面,接著才是 order by、limit。

select:挑要顯示的欄位

我想先只看品項和杯數兩欄,如果要用 QUERY 寫,就是:

Google 試算表公式
fx

只取品項和杯數兩欄

=QUERY(A1:E13, "select B, C")

這邊的 B、C 是「欄位代號」,用的是工作表上實際的欄字母。我的資料從 A 欄開始,所以 B 就是品項、C 就是杯數。來看看結果(共 13 列,第一列是 QUERY 帶出來的標題):

品項杯數
蘋果紅茶12
青茶7
蘋果紅茶5
烏龍奶茶9
青茶14
蘋果紅茶8
烏龍奶茶6
青茶11
蘋果紅茶13
烏龍奶茶4
青茶10
蘋果紅茶7

要全部欄位的話寫 select *。欄位順序可以自己換,select C, B 就會先顯示杯數、再顯示品項。

where:設條件

回到一開始的題目,「一次買 10 杯以上」就是在 select 後面加 where:

Google 試算表公式
fx

杯數大於等於 10 的訂單,顯示日期、品項、杯數

=QUERY(A1:E13, "select A, B, C where C >= 10")

來看看結果:

日期品項杯數
2026/03/03蘋果紅茶12
2026/03/21青茶14
2026/04/11青茶11
2026/04/18蘋果紅茶13
2026/05/04青茶10

一共 5 筆。數字條件直接寫數字,不用引號。可以用的比較符號有 =、!=(或 <>)、>、<、>=、<=,條件之間可以用 and、or 連接。

文字條件的引號

如果條件是文字,要用引號把文字包起來。因為整個查詢已經被雙引號包住了,裡面的文字就改用單引號:

Google 試算表公式
fx

品項是青茶的訂單,顯示日期和杯數

=QUERY(A1:E13, "select A, C where B = '青茶'")
日期杯數
2026/03/057
2026/03/2114
2026/04/1111
2026/05/0410

這是新手很容易卡住的地方,如果寫成 B = "青茶",雙引號會把查詢字串提早結束,公式就壞掉了。官方文件說單引號和雙引號都可以當字串引號,所以在公式裡一律用單引號最保險。

日期條件

日期不能直接寫 2026/04/01,要用 date 加上 yyyy-mm-dd 格式的文字:

Google 試算表公式
fx

只看 2026 年 4 月的訂單

=QUERY( A1:E13, "select A, B, C where A >= date '2026-04-01' and A < date '2026-05-01'" )
日期品項杯數
2026/04/02蘋果紅茶8
2026/04/06烏龍奶茶6
2026/04/11青茶11
2026/04/18蘋果紅茶13
2026/04/27烏龍奶茶4

日期還有幾個容易踩的坑,整理在 QUERY 進階陷阱。

order by:排序

order by 後面接要排序的欄位,預設由小到大,加 desc 就是由大到小。我想看青茶的訂單,杯數多的排前面:

Google 試算表公式
fx

青茶的訂單,依杯數由大到小

=QUERY(A1:E13, "select A, C where B = '青茶' order by C desc")
日期杯數
2026/03/2114
2026/04/1111
2026/05/0410
2026/03/057

要小心 order by 的位置,它得放在 where 的後面。

如果排序的欄位是中文,QUERY 的 order by 是照字碼(Unicode)的順序排,不是筆畫、注音或拼音:「烏」的字碼最小、「蘋」次之、「青」最大,所以會是「烏龍奶茶」、「蘋果紅茶」、「青茶」。要筆畫排序可以改用 SORT,試算表地區設為台灣時,它排出來是「青茶」、「烏龍奶茶」、「蘋果紅茶」。想要照自己的順序排的話,可以另外加一欄編號。

limit:只取前幾筆

limit 放在最後,指定最多回傳幾列。想知道金額最高的 3 筆訂單:

Google 試算表公式
fx

金額最高的三筆訂單

=QUERY(A1:E13, "select A, B, D order by D desc limit 3")
日期品項金額
2026/04/18蘋果紅茶598
2026/03/03蘋果紅茶540
2026/03/21青茶476

四個子句合起來就是:先 select 挑欄位,where 篩列,order by 排序,最後 limit 截尾。

offset:排序後跳過前幾筆,再取一頁

用一張小表示範 offset,也可以參考方格子的 ORDER BY/LIMIT/OFFSET 舊文。另開空白表,在 A1:B4 放代碼/杯數兩欄,資料依序是 B/20、A/10、C/30。D2 輸入:

Google 試算表公式
fx

先按代碼排序,跳過第一筆後取一筆,無來源表頭

=QUERY( {A2:B4}, "select Col1,Col2 order by Col1 limit 1 offset 1", 0 )

排序後是 A/10、B/20、C/30;offset 1 跳過 A/10,limit 1 留一筆,結果是 B/20。語法寫 limit 再 offset,但含義是先跳過、再限制筆數,官方語言文件也這樣定義。這裡的 offset 是查詢子句,不是動態參照用的 OFFSET 函式。

本例範圍從第 2 列開始、表頭參數為 0;若來源含一列表頭,就應明填 1。跳過筆數針對資料列,不拿來源標題當第一筆。分頁必須先訂穩定排序,有同值時再加唯一代碼等排序鍵;不能把目前儲存格位置當成不變的順序。

例如第 5 列新增 AA/15,並把本例範圍擴成 A2:B5,同樣跳過一筆後會回 AA/15,原本的 B 被擠到後面。固定 offset 的頁面會隨新增/刪除資料漂移,不適合拿來當永久資料編號或交付快照;要交付某一次結果,另存當時的篩選與排序條件。

欄位代號:A、B 還是 Col1?

前面用的 A、B 是工作表的欄字母,不是「範圍裡的第幾欄」。範圍如果是 B1:E13,能用的欄位代號就是 B、C、D、E,寫 select A 會得到 #VALUE!,提示是「無法剖析 函式 QUERY 的第 2 參數 的查詢字串:NO_COLUMN: A」。金額在 D 欄,所以這樣寫:

Google 試算表公式
fx

資料範圍從 B 欄開始,查詢內仍然用工作表的字母,D 欄是金額

=QUERY(B1:E13, "select D where D >= 500")
金額
540
598

資料如果不是一個普通的範圍,而是用 { } 自己組出來的陣列(或是其他函式算出來的結果),就沒有「欄位字母」可以對應了,這時要改用 Col1、Col2、Col3 的寫法,意思是陣列的第 1、2、3 欄:

Google 試算表公式
fx

陣列 B1:D13 的第 2 欄是杯數、第 3 欄是金額

=QUERY({B1:D13}, "select Col1, Col3 where Col2 >= 12", 1)
品項金額
蘋果紅茶540
青茶476
蘋果紅茶598

這邊的大括號 { } 在 Sheets 是「自己組一個陣列」的意思。最後的 1 是下一節要講的標題列數。

標題列參數

QUERY 的第三個參數是「資料最上面有幾列是標題」,不填的話會讓試算表自己猜。如果資料的標題是一般文字、下面是數字,它多半猜得對。不過一旦資料第一列也是文字,或是你用 { } 組出來的陣列,猜錯的機會就變高了,所以建議直接寫清楚。

如果範圍不包含標題列,就填 0:

Google 試算表公式
fx

範圍從第 2 列開始,沒有標題,所以標題列數填 0

=QUERY(A2:E13, "select B, C where C >= 13", 0)

結果只有兩列資料:青茶 14、蘋果紅茶 13。因為這次沒有標題,所以結果也沒有標題列。(帶彙總函數的查詢另當別論,見 QUERY 進階陷阱。)

練習

1

外送大單

用 A1:E13 的訂單,找出「通路是外送、金額超過 300」的訂單,顯示日期、品項、金額,金額由大到小排序。

結果會是三列:2026/04/18 蘋果紅茶 598、2026/05/04 青茶 360、2026/04/06 烏龍奶茶 306。

學會這四個子句,已經可以應付大部分「篩選加排序」的需求了。接下來可以看看 QUERY 的分組彙總與月報實戰,那篇用 group by 做加總和平均。如果只是單純篩選,FILTER 的語法會短一點。

如果 QUERY 沒報錯卻少了幾列,或是日期、括號怎麼寫都不對,可以看 QUERY 少了幾列、日期比不出來、括號算錯的原因與修法。

這個步驟如果每週都要重做

現在
每週手動改條件挑出大單,再複製貼到信裡寄給同事
自動化後
每週一自動挑出一次買 10 杯以上的訂單,寄給負責的同事
有類似需求,可以來信聊聊
分享:
#QUERY#查詢語言#入門
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。