Digamos que eu tenha uma instrução SELECT da seguinte forma:
SELECT ..., field1
FROM ...
GROUP BY field1
Agora digamos que eu queira retornar um segundo campo, field2
. Acontece que campo2 é funcionalmente dependente de campo1 (por exemplo, campo1 e campo2 podem ser da mesma tabela e campo1 é a chave primária dessa tabela). Agora tenho duas maneiras equivalentes de adicionar field2 à consulta:
Opção 1:
SELECT ..., field1, field2
FROM ...
GROUP BY field1, field2
Opção 2:
SELECT ..., field1, MIN(field2) /* or some other, arbitrary aggregate function */
FROM ...
GROUP BY field1
Novamente, como field2 depende funcionalmente de field1, ambas as consultas devem retornar o mesmo conjunto de resultados.
Existem boas razões para preferir uma opção sobre a outra?
A resposta pode ser específica da plataforma. Embora os resultados sejam os mesmos, seu desempenho pode ser muito diferente.
Eu sugeriria outra abordagem, porque parece documentar claramente a seguinte intenção: calcular alguns agregados e decorá-los com outro(s) campo(s). Aqui está um exemplo: