iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0
AI/ ML & Data

粗暴的資料處理 DuckDB系列 第 8

Day08 -- DuckDB Style SQL (2) ?

  • 分享至 

  • xImage
  •  

前面提到 DuckDB 是一個專為 analytic 而生的 database,那最經典的 analytic query 莫過於 aggregate 了,或者它有著更白話的名稱, GROUP BY

今天我們就來介紹,DuckDB 首先實作,BigQuery、Snowflake、Spark(Databricks),等後續採納的新語法。

GROUP BY ALL

你可能熟悉 GROUP BY,但 GROUP BY ALL 是什麼意思呢?
當我們寫 SQL 時,特別是包含 aggregate 的查詢,我們通常會從 SELECT 子句開始

SELECT  department, sum(salary), …

在我們完成一個需要 aggregate (這個 query 具體來說 sum(salary) ) 的 SELECT 子句時,基本上已經決定了要使用的 GROUP BY Key。 通常你會把GROUP BY Key 放在 SELECT 子句的最前面(這個 query 具體來說 department)。

但是,就是這個但是,你難道不覺得在 GROUP BY 子句中再次列出這些 col, 有時會顯得重複且繁瑣。

GROUP BY ALL 就是在這裡派上用場的,它的意思是,安安 那些沒有 aggregate 的 col 就自動幫我當成GROUP BY Key 拉

這真的很方便,而且它讓調整 GROUP BY Key 變得更簡單。你不再需要同時修改 SELECT 和 GROUP BY 子句,現在可以更輕鬆地處理這些變動。

舉個具體的例子
這是普通的 GROUP BY

SELECT department, sum(salary)
FROM  'https://ironman24.douenergy.com/employees.parquet'
GROUP BY department;

這是 GROUP BY ALL

SELECT department, sum(salary)
FROM  'https://ironman24.douenergy.com/employees.parquet'
GROUP BY ALL  ;

當我們要改成用 first name 的薪水總合時,

普通的 GROUP BY 要改兩個地方一個是 SELECT 一個是 GROUP BY

SELECT  first_name, sum(salary)
FROM  'https://ironman24.douenergy.com/employees.parquet'
GROUP BY first_name;

GROUP BY ALL 只要改 SELECT , 剩下的 GROUP BY Key 會自動推斷

SELECT first_name, sum(salary)
FROM  'https://ironman24.douenergy.com/employees.parquet'
GROUP BY ALL  ;

是不是非常方便呢,趕快到 DuckDB WASM 跟 Colab 試試看吧!


上一篇
Day07 -- DuckDB Style SQL (1) ?
下一篇
Day09 -- DuckDB Style SQL (3) ?
系列文
粗暴的資料處理 DuckDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言