Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Agrupar por cláusula no mySQL e postgreSQL, por que o erro no postgreSQL?


Você precisa usar FUNÇÃO AGREGADA :

As funções agregadas calculam um único resultado de um conjunto de valores de entrada.
SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table 
GROUP BY col2;

db<>demonstração de violino

Manipulação MySQL de GROUP BY :

No SQL padrão, uma consulta que inclui uma cláusula GROUP BY não pode se referir a colunas não agregadas na lista de seleção que não são nomeadas na cláusula GROUP BY

e:

O MySQL estende o uso de GROUP BY para que a lista de seleção possa se referir a colunas não agregadas não nomeadas na cláusula GROUP BY. Isso significa que a consulta anterior é legal no MySQL. Você pode usar esse recurso para obter melhor desempenho evitando classificação e agrupamento de colunas desnecessários. No entanto, isso é útil principalmente quando todos os valores em cada coluna não agregada não nomeada em GROUP BY são os mesmos para cada grupo. O servidor é livre para escolher qualquer valor de cada grupo, portanto, a menos que sejam iguais, os valores escolhidos são indeterminados

Portanto, com a versão do MySQL sem função agregada explícita, você pode acabar com valores indeterminísticos. Eu sugiro fortemente usar a função agregada específica.

EDITAR:

De Manipulação MySQL de GROUP BY :

O SQL92 e versões anteriores não permitem consultas para as quais a lista de seleção, a condição HAVING ou a lista ORDER BY referem-se a colunas não agregadas que não são nomeadas na cláusula GROUP BY.

SQL99 e posteriores permitem esses não agregados por recurso opcional T301 se forem funcionalmente dependentes de colunas GROUP BY: Se existir tal relação entre nome e cliente, a consulta é válida. Este seria o caso, por exemplo, se o cliente fosse uma chave primária de clientes.

Exemplo:
SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o
JOIN customers AS c
  ON o.custid = c.custid
GROUP BY o.custid;