Como isso é uma declaração válida (onde id é a chave primária da tabela):
select * from table group by id ;
e isso não é:
select * from table group by name ;
ERRO: a coluna "pgluser.id" deve aparecer na cláusula GROUP BY ou ser usada em uma função agregada
Violino .
A questão é por que a primeira é uma consulta legal, ou seja, por que o agrupamento por chave primária é válido?
id
é uma chave primária.Tanto quanto me lembro, esta é realmente uma consulta legal de acordo com ANSI/ISO SQL.
O agrupamento por chave primária resulta em um único registro em cada grupo, o que é logicamente o mesmo que não agrupar / agrupar por todas as colunas, portanto, podemos selecionar todas as outras colunas.
Referência dada por @a_horse_with_no_name
https://www.postgresql.org/docs/current/static/sql-select.html#SQL-GROUPBY
Embora logicamente esperássemos que UNIQUE NOT NULL seguisse o mesmo comportamento, ele se aplica apenas a PK (conforme descrito na documentação)
Acho que o motivo seria:
id
é a chave primária aqui (única) e agrupar por chave primária é semelhante agroup by *
. Então é apenas semelhante ao que deve estar bem.