GROUP BY
com Campos Escondidos
O MariaDB 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 "As Linhas Armazenando o Group-wise Máximo de um Certo Campo".
Note que se você estiver usando a versão 3.22 do MariaDB (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 MariaDB você pode fazer: