Postgresql

GROUP BY 查詢的意外行為

  • July 31, 2020
CREATE TABLE public.temp (
  id integer, 
  a integer, 
  b integer, 
  x integer
);

select x, a, b
   from temp
group by id, a, b;

最終出現預期錯誤:

ERROR:  column "temp.x" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select x, a, b
               ^

但是,添加主鍵後:

ALTER TABLE ONLY temp ADD  PRIMARY KEY (id);

…之前的SELECT查詢執行沒有錯誤。

為什麼x現在可以在沒有聚合的情況下使用列?

行為是否記錄在案?

PRIMARY KEYin子句明確涵蓋了自 Postgres 9.1 以來的GROUP BY整行。發行說明:

在子句中指定主鍵時允許查詢目標列表中的非GROUP BYGROUP BY(Peter Eisentraut)

手冊:

GROUP BY存在或存在任何聚合函式時,列表表達式引用未分組列是無效的,SELECT除非在聚合函式內或當未分組列在功能上依賴於分組列時,否則可能會有多個為未分組的列返回的值。如果分組列(或其子集)是包含未分組列的表的主鍵,則存在功能依賴性。

有關的:

引用自:https://dba.stackexchange.com/questions/271950