前面提到 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 試試看吧!