O MySQL tem extendido o uso de GROUP BY
.
Você pode utilizar colunas ou cálculos na expressão
SELECT
que não aparecem na parte
GROUP BY
. Ele espera por qalquer
valor possível para este grupo. Você pode
utilizar isto para conseguir um melhor desempenho evitando
ordenação e agrupamento em itens desnecessários. Por
exemplo, você não precisa fazer um agrupamento em
cliente.nome
na consulta seguinte:
mysql>SELECT pedido.idcliente,cliente.nome,MAX(pagamento)
->FROM pedido, cliente
->WHERE pedido.idcliente = cliente.idcliente
->GROUP BY pedido.idcliente;
No padrão SQL, você teria que adicionar
cliente.nome
a cláusula GROUP
BY
. No MySQL, o nomê é redundante se você não o
executa em modo ANSI.
Não utilize este recurso se
as colunas omitidas na parte GROUP BY
não
são únicas no grupo! Você obterá resultados inexperados.
Em alguns casos, você pode utilizar MIN
e
MAX
para obter o valor de uma coluna
específica, mesmo que ele não seja único. O exemplo
seguinte fornece o valor de coluna
do
registro contendo o menor valor na coluna
ordem
:
SUBSTR(MIN(CONCAT(RPAD(ordem,6,' '),coluna)),7)
See Secção 3.6.4, “As Linhas Armazenando o Group-wise Máximo de um Certo Campo”.
Note que se você estiver usando a versão 3.22 do MySQL (ou
anterior) ou se estiver tentando seguir o SQL-99, você não
pode utilizar expressões nas cláusulas GROUP
BY
or ORDER BY
. Você pode
contornar esta limitação utilizando um alias para a
expressão:
mysql>SELECT id,FLOOR(value/100) AS val FROM nome_tabela
->GROUP BY id,val ORDER BY val;
Na versão 3.23 do MySQL você pode fazer:
mysql> SELECT id,FLOOR(value/100) FROM nome_tabela ORDER BY RAND();
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.