QUERY 函式大解析(七):簡易日期時間擷取術

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

不知不覺寫到第七篇了!QUERY 真的有好多好多東西可以說 (ノ>ω<)ノ

QUERY 其實還能處理有日期、時間的資料,而且語法也相當容易,和我們之前就看過的聚集函式很像。你如果會了之前的聚集函式,相信這次處理日期和時間也會對你來說很簡單!

我在方格子上寫了一系列使用 QUERY 的教學文章,也歡迎你來看看:

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


(包起來就好)

我們先來介紹這次要利用的東西,叫「純量函式(Scalar Function)」。( ˘•ω•˘ )

不過那什麼純什麼的名字其實不是很重要,簡單來說你可以把它想像成一種濾鏡,把資料透過去濾鏡後就是另一種顏色或形狀。比如說:

  • 我有個資料叫 apple,用「大寫濾鏡」就可以把 apple 轉成 APPLE。
  • 我有個資料叫 TEA,用「小寫濾鏡」就可以把 TEA 變成 tea。
  • 我有個資料叫 2022/01/23,用「年份濾鏡」就可以把 2022/01/23 變成 2022。

目前在 QUERY 可以操作的有「日期」、「時間」和「字串大小寫轉換」這三種濾鏡,使用方法其實很簡單,就是拿這些濾鏡後的括號把欄位字母包起來就好:

濾鏡(A)
濾鏡(B)

這就跟我們之前學到的聚集函式一樣,包~起來就好。

濾鏡(A), 濾鏡(B), 濾鏡(C)...
SUM(A), AVG(B), COUNT(C)...

那我們今天就來看一些實用的「日期」和「時間」濾鏡有哪些:

日期

  • year():回傳日期的年份。
在 A 欄的某資料是 2022/01/23
year(A) --> 2022
  • month():回傳日期的月份。
    要注意的是,這裡的月份是以 0 為基底,要記得加 1 才會顯示正確的月份。舉例:
在 A 欄的某資料是 2022/01/23
month(A) --> 0
month(A) + 1 --> 1

在 B 欄的某資料是 2022/02/23
month(B) --> 1
month(B) + 1 --> 2

在 C 欄的某資料是 2022/10/23
month(C) --> 9
month(C) + 1 --> 10
  • day():回傳日期的日子。
在 A 欄的某資料是 2022/01/23
day(A) --> 23
  • quarter():回傳日期的季別。1 就是第一季、2 就是第二季,以此類推。
在 A 欄的某資料是 2022/01/23
quarter(A) --> 1

在 B 欄的某資料是 2022/04/23
quarter(B) --> 2
  • dayOfWeek():回傳日期的星期。要注意 QUERY 是以星期天當做一個星期裡的第一天,所以 1 是星期天、2 是星期一、3 是星期二,以此類推。
在 A 欄的某資料是 2022/01/23(這天是星期天)
dayOfWeek(A) --> 1

在 B 欄的某資料是 2022/02/23(這天是星期三)
dayOfWeek(B) --> 4

時間

邏輯跟剛剛的日期其實是一樣的,只要把欄位字母放進去括號裡面就可以了。

  • hour():回傳時間的小時。
在 A 欄的某資料是 14:25:19
hour(A) --> 14
  • minute():回傳時間的分。
在 A 欄的某資料是 14:25:19
minute(A) --> 25
  • second():回傳時間的秒。
在 A 欄的某資料是 14:25:19
second(A) --> 19
  • millisecond():回傳時間的毫秒。
在 A 欄的某資料是 14:25:19.487
millisecond(A) --> 487

看起來很複雜,其實做起來不難喔!我們馬上來練習一下。


練習

假設我們是間傢俱販賣商,有個 2022 年一月到十二月的訂單資訊,歡迎來這邊做一個副本練習唷!打開來就像這樣:

raw-image

由左到右有訂單成立日期(A)、時間(B)、訂單 ID(C)、客戶 ID(D)、售出品項(E)、品項單價(F)、售出件數(G)、合計(H)和訂單狀態(I)。

有天,老闆希望我們找到以下資訊:

  • 想知道每個月的總銷售額。
  • 每個月的五號是全館九折的活動日,想知道各品項的總銷售額。
  • 每天晚上 9 點 00 分到 11 點 59 分有會員點數加倍活動,想知道各品項的總銷售件數。
  • 想知道星期一到星期日裡,各品項的平均銷售額。

並且,我們只算狀態「已發貨」的訂單,其他「已取消」的訂單不列入計算。那我們來看看怎麼做:

想知道每個月的總銷售額

要拿到總銷售額的話可以用 SUM(H),我們再用欄 A 的「月份」做 GROUP BY 就可以了。

=QUERY('訂單資料'!A:I,
"SELECT Month(A) + 1, SUM(H)
WHERE I = '已發貨'
GROUP BY Month(A) + 1")

記得要 Month(A) 之後要加個 1,才會顯示正確的月份唷!如果沒 +1 會顯示 0 到 11 月。GROUP BY 要跟顯示欄位一致,所以也需要寫上 Month(A) + 1。

執行結果就會像這樣:

raw-image

每月 5 號各品項的總銷售件數

這種操作除了 SELECT 之外,當然也可以用在 WHERE 上面。設下每月五號的條件、再做 COUNT (計算件數)和 GROUP BY 就好囉!來看看我的操作:

=QUERY('訂單資料'!A:I,
"SELECT E, COUNT(C)
WHERE Day(A) = 5 and I = '已發貨'
GROUP BY E")

來看看結果吧!

raw-image

每天晚上 9 點 00 分到 11 59 分各品項的總銷售件數

如果要找晚上 9 點整到 11 點 59 分的資料,或許可以從 Hour() 切入,取得小時數,也就是 21、22、23 這三個數字了。

那為什麼不是取 0 呢?因為 0 的話就會是凌晨 12 點以後的資料了,我們不想要這些。24 也不行,因為 Hour() 最大值就是 23 喔。

關於這邊 WHERE 的條件寫法,我想到兩個:

... WHERE (Hour(B) >= 21 and Hour(B) <= 23)and I = '已發貨'

用括號告訴 QUERY 這段含有 Hour(B) 的條件要先判斷、並且要用 and 限縮 Hour(B) 的範圍。 如果這邊是用 or 的話,任何大於 21 或是小於 23 的資料都會回傳,這就沒有限縮範圍的意義了。

raw-image

又或是:

... WHERE (Hour(B) = 21 or Hour(B) = 22 or Hour(B) = 23)and I = '已發貨'

用括號告訴 QUERY 要先判斷 Hour(B),用列舉的方式寫出時數。

兩種 WHERE 的執行效果都一樣,我們來看看結果:

raw-image

星期一到星期日各品項的平均銷售額

這可以看成兩樣資訊:

  • 各品項的平均銷售額
  • 星期一到星期日

平均銷售額可以用 SELECT E, AVG(H) 來做,各品項再用 GROUP BY E 就可以對聚集的數字分組。

至於「星期一到星期日」,就可以用 dayOfWeek(A) 來做 PIVOT,對已經 GROUP BY 的結果進一步透視,看到星期裡每個日子裡平均銷售額的表現。

把上面這兩個想法拼起來,再加上只統計「已發貨」的條件,你可以寫出:

=QUERY('訂單資料'!A:I,
"SELECT E, AVG(H)
WHERE I = '已發貨'
GROUP BY E
PIVOT dayOfWeek(A)")

就會得到:

raw-image

這次試著把之前學過的一些內容綜合起來,設計了幾道題目給大家參考參考。如果還是不確定怎麼做,也歡迎你回到之前的文章複習一下,留言發問當然也可以的!

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

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

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



留言
avatar-img
留言分享你的想法!
喜特先生 Mr. Sheet -avatar-img
發文者
2024/01/30
QUERY 函式大解析,系列文索引提及了這篇文章,趕快過去看看吧!
千歲-avatar-img
2022/08/22
請問,我在google 試算表中,要呈現now的時間函數,但是總是會有重新計算的問題,因為此項是要紀錄一開始的表格輸入時間。是否能讓試算表不從新計算,或是透過QUERY函數讓他幾截取第一次的時間點呢?謝謝。
喜特先生 Mr. Sheet -avatar-img
發文者
2022/08/22
嗨,千歲! 謝謝你來看我的教學~ 如果我的了解正確的話,你的意思是希望只記錄第一次的時間?或許可以試試看在記錄時間的儲存格,按快捷鍵 Ctrl/Cmd + Shift + ;,就會記錄那個當下的時間(且不會像 NOW 動態變更)。可以試試看,讓我知道有沒有問題~
avatar-img
喜特先生官方沙龍
19.5K會員
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
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇文章,會帶著大家複習以前學過的前綴和框架, 並且以區間和的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 前綴和 prefix sum框架 與 區間和計算的關係式 接下來,我們會用這個上面這種框架,貫穿一些同類型,有關聯的題目 (請讀者、或觀眾
Thumbnail
這篇文章,會帶著大家複習以前學過的前綴和框架, 並且以區間和的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 前綴和 prefix sum框架 與 區間和計算的關係式 接下來,我們會用這個上面這種框架,貫穿一些同類型,有關聯的題目 (請讀者、或觀眾
Thumbnail
資料分析時,如果發現二維表(又稱寬資料),寬資料的特性是每一列包含多個數值,會導致樞紐分析無法正常運作,或者函數要進行分析時會綁手綁腳的,因為寬資料多數用來呈現分析後的結果。 這時候我們就會需要把他們轉換成一維表(又稱長資料),長資料是乾淨的資料,其特性是每一列只包含一個數值,此數據對於樞紐與數據
Thumbnail
資料分析時,如果發現二維表(又稱寬資料),寬資料的特性是每一列包含多個數值,會導致樞紐分析無法正常運作,或者函數要進行分析時會綁手綁腳的,因為寬資料多數用來呈現分析後的結果。 這時候我們就會需要把他們轉換成一維表(又稱長資料),長資料是乾淨的資料,其特性是每一列只包含一個數值,此數據對於樞紐與數據
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 有時候我們在處理字幕檔或者是音訊時, 常常會計算時間這
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 有時候我們在處理字幕檔或者是音訊時, 常常會計算時間這
Thumbnail
網友提出一個PQ的需求,如下圖。 針對這個需求稍微做個解釋,資料中有日期、品項、數值,要將日期變成月份,並且與品項一同分析,將所有數值加總起來,如下圖。 這題其實方法有很多種,可以用函數(365、非365)、樞紐、PQ都能做到,我們就來看看這幾種方法如何做到的吧! 函數法(非365) 非
Thumbnail
網友提出一個PQ的需求,如下圖。 針對這個需求稍微做個解釋,資料中有日期、品項、數值,要將日期變成月份,並且與品項一同分析,將所有數值加總起來,如下圖。 這題其實方法有很多種,可以用函數(365、非365)、樞紐、PQ都能做到,我們就來看看這幾種方法如何做到的吧! 函數法(非365) 非
Thumbnail
Python time模組是一個提供時間相關功能的模組,可以用來獲取當前時間、格式化時間、延遲執行、測量執行時間等,今天將介紹time模組的常用函數和用法。   1. 獲取當前時間 time模組提供了多種獲取當前時間的函數,例如: time.time():返回當前時間的時間戳,即從1970
Thumbnail
Python time模組是一個提供時間相關功能的模組,可以用來獲取當前時間、格式化時間、延遲執行、測量執行時間等,今天將介紹time模組的常用函數和用法。   1. 獲取當前時間 time模組提供了多種獲取當前時間的函數,例如: time.time():返回當前時間的時間戳,即從1970
Thumbnail
這篇文章會展示一下如何使用現代化工具,快速把論文上的公式轉換成程式碼 1.首先到 https://accounts.mathpix.com/login 網站註冊一個帳號並下載snipping 這個軟體是專門讓使用者利用截圖的方式把數學式子轉化成LATEX格式 我以一個論文看到的演算法為範例 好然後
Thumbnail
這篇文章會展示一下如何使用現代化工具,快速把論文上的公式轉換成程式碼 1.首先到 https://accounts.mathpix.com/login 網站註冊一個帳號並下載snipping 這個軟體是專門讓使用者利用截圖的方式把數學式子轉化成LATEX格式 我以一個論文看到的演算法為範例 好然後
Thumbnail
雜湊演算法(hash function)。或許你聽過它,但你是否了解它?劍術大師都說要人劍合一了,若是資訊人員不能人與技術合一,那要如何登峰造極?我們必須正確的使用它,才能讓它變成你的武器。 縮圖來源:https://www.pexels.com/zh-tw/photo/53207/
Thumbnail
雜湊演算法(hash function)。或許你聽過它,但你是否了解它?劍術大師都說要人劍合一了,若是資訊人員不能人與技術合一,那要如何登峰造極?我們必須正確的使用它,才能讓它變成你的武器。 縮圖來源:https://www.pexels.com/zh-tw/photo/53207/
Thumbnail
時輪是甚麼? 這是統全數理自創概念,用於確定所有算法的商數時使用 且能夠讓程式碼設計師「逐步檢查計算過程」
Thumbnail
時輪是甚麼? 這是統全數理自創概念,用於確定所有算法的商數時使用 且能夠讓程式碼設計師「逐步檢查計算過程」
Thumbnail
統全數理功用: 1.方便計算機計算過程直觀化,透過時輪系統,一步一步地理解計算過程 2.數理語言的統一規則化 3.可能方便初學者逐步理解   算法案例   二元算法 統全數理法化   次方/平方/立方.次方根,如何計算對數?   算法案例:加法與減法   算法案例:乘法除法
Thumbnail
統全數理功用: 1.方便計算機計算過程直觀化,透過時輪系統,一步一步地理解計算過程 2.數理語言的統一規則化 3.可能方便初學者逐步理解   算法案例   二元算法 統全數理法化   次方/平方/立方.次方根,如何計算對數?   算法案例:加法與減法   算法案例:乘法除法
Thumbnail
本文詳述模板設計的思路以及仔細講解函數分析,作者本人是文組背景,非常明白函數這個在 Notion 中最需要學習成本的項目帶來的痛點,本文即使函數小白也能輕鬆看懂。本文介紹format()函數、add()函數、 concat()函數和floor()。
Thumbnail
本文詳述模板設計的思路以及仔細講解函數分析,作者本人是文組背景,非常明白函數這個在 Notion 中最需要學習成本的項目帶來的痛點,本文即使函數小白也能輕鬆看懂。本文介紹format()函數、add()函數、 concat()函數和floor()。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News