- GROUP BY list 的欄位,物以類聚
- SELECT list 套用 aggregation 的欄位,依照 GROUP BY 分類回傳結果並壓縮成一筆;window function 則是依照分類回傳但保持筆數(重複資料)
- SELECT list 中,既非 aggregation 欄位,又不是 GROUP BY list,卻又出現在 SQL 的欄位,資料會隨便亂回
對照之下,PGSQL 跟其他大品牌的關聯式資料庫,SQL 行為的規格會比較相近。
例如 GROUP BY 就比較標準:
- GROUP BY list 的欄位,物以類聚
- SELECT list 套用 aggregation 的欄位,依照 GROUP BY 分類回傳結果並壓縮成一筆;window function 則是依照分類回傳但保持筆數(重複資料)
- 「不允許」SELECT list 中,既非 aggregation 欄位,又不是 GROUP BY list,卻又出現在 SQL 的欄位
雖然有時令人稍微不習慣,但有時候又很需要的感覺:有偶爾的資料欄位之間有人為知道的關係(對 A 欄位做某種過濾或 JOIN 之後,B 欄位的值也會一樣均勻),但又不需要特地讓資料庫一直算(GROUP BY list 也要花力氣跑的),只想要某些欄位顯示出「一位代表」就好(因為預期都會長得一樣~)而不用寫落落長的 GROUP BY list。
到了 PGSQL16 ,就出一個很重要的功能~滿足這種不用每個欄位都放到 group by 的用途。