Postgresql
GROUP BY 查詢的意外行為
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 KEY
in子句明確涵蓋了自 Postgres 9.1 以來的GROUP BY
整行。發行說明:在子句中指定主鍵時允許查詢目標列表中的非
GROUP BY
列GROUP BY
(Peter Eisentraut)當
GROUP BY
存在或存在任何聚合函式時,列表表達式引用未分組列是無效的,SELECT
除非在聚合函式內或當未分組列在功能上依賴於分組列時,否則可能會有多個為未分組的列返回的值。如果分組列(或其子集)是包含未分組列的表的主鍵,則存在功能依賴性。有關的: