除了在寫 aggragate query 時,常常可以派上用場的 ORDER BY ALL
GROUP BY ALL
另一個 analytic query 常見的 pattern 是 SELECT 某個 TABLE 中大部分的 col
e.g 一個 employee table 有
employee_id ┆ first_name ┆ last_name ┆ department ┆ salary
五個 col , 但是 employee_id 對我目前的 query 沒有幫助
SELECT first_name , last_name , department ,salary
FROM 'https://ironman24.douenergy.com/employees.parquet'
必須要手動列出所有 col 名稱,非常麻煩
DuckDB 很貼心的提供兩個 clause 簡化這種情境
有時候可能並不需要某些 col。在傳統的 SQL 查詢中,我們必須手動列出所有需要的列,除非使用 * 選擇所有列,但這往往會導致不必要的數據加載和處理。
這時,EXCLUDE 語句就顯得格外有用。它允許我們在使用 * 選擇所有列時,排除一些不需要的列。
SELECT * EXCLUDE (employee_id)
FROM 'https://ironman24.douenergy.com/employees.parquet'
EXCLUDE 的使用讓我們的 SQL 查詢更為簡潔,我們可以方便地選擇除了少數幾個不需要的列之外的所有列,這樣就無需繁瑣地列出所有其他欄位。
在進行數據分析時,經常會遇到需要對某些列進行運算或替換的情況。比如說,我們可能需要將金額由元轉換為千元。在傳統的 SQL 中,這需要在 SELECT 子句中顯式書寫新的運算表達式,但這可能會使 SQL 查詢顯得過於冗長且重複。
REPLACE 語句就是在這裡發揮作用的,它允許我們在使用 * 選擇所有列的同時,直接替換特定的列。
SELECT * REPLACE (salary/1000 as salary)
FROM 'https://ironman24.douenergy.com/employees.parquet'
更棒的事情是兩個 clause 可以合起來一起用喔 !!!
SELECT * EXCLUDE(first_name) REPLACE (salary/1000 as salary)
FROM 'https://ironman24.douenergy.com/employees.parquet';
以上兩種語句的使用不僅使 SQL 查詢更為直觀,還能提升編寫效率和查詢效率。它們讓我們能夠更加靈活地處理數據,使數據分析工作變得更為簡單。
趕快到 DuckDB WASM 或 Colab 試試看吧!