Funções GROUP BY
Se você utiliza um função de agrupamento em uma instrução que não contenha um cláusula GROUP BY
, equivale a fazer um agrupamento com todos os registros.
COUNT(expr)
Retorna a quantidade de valores não-
NULL
nos registros recuperados por uma instrucaoSELECT
:mysql>
SELECT estudante.nome_estudente,COUNT(*)
->FROM estudante,curso
->WHERE estudante.id_estudante=curso.id_estudante
->GROUP BY nome_estudante;
COUNT(*)
difere um pouco ao retornar o número de registros recuperados, se eles possuírem ou não valoresNULL
.COUNT(*)
é otimizado para retornar muito rápido seSELECT
recuoperar registros de uma tabela, nenhuma outra coluna for retornada, e não houver nenhuma cláusulaWHERE
. Por exemplo:mysql>
SELECT COUNT(*) FROM estudente;
Esta otimizacão se aplica apenas a tabelas
MyISAM
eISAM
, porque uma contagem exata de registros é armazenada para estes tipos de tabelas e podem ser acessadas muito rapidamente. Para mecanismos de armazenamentos transacionais (InnodB
,BDB
), armazenar um contagem de registros exatos é mais problemático porque múltiplas transações podem estar ocorrendo, e cada uma pode afetar a contagem.COUNT(DISTINCT expr,[expr...])
Retorna a quantidade de regiastros com valores não-
NULL
diferentes:mysql>
SELECT COUNT(DISTINCT resultados) FROM estudente;
No MariaDB você pode obter o número de combinação de expressões distintas que não contém NULL fornecendo uma lista de expressões. No SQL-99 você teria que concatenar todas as expressão utilizando
COUNT(DISTINCT ...)
.AVG(expr)
Retorna o valor médio de
expr
:mysql>
SELECT nome_estudante, AVG(nota_teste)
->FROM estudante
->GROUP BY nome_estudante;
MIN(expr)
,MAX(expr)
Retorna o valor mínimo o u máximo de
expr
.MIN()
eMAX()
poder usar uma string como argumento; nestes casos eles retornam o a string de valor mínimo ou máximo. See "Como o MariaDB Utiliza Índices".mysql>
SELECT nome_estudante, MIN(nota_teste), MAX(nota_teste)
->FROM estudante
->GROUP BY nome_estudante;
Em
MIN()
,MAX()
e outras funções de agrupamento o MySQL, atualmente, compara colunasENUM
eSET
pelo seu valor string em vez de fazê-lo pela sua posição relativa de string no conjunto. Isto será retificado.SUM(expr)
Retorna a soma de
expr
. Note que se o conjunto de retorno não possuir registros ele retornará NULL!GROUP_CONCAT(expr)
Sintaxe completa:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {inteiro_sem_sinal | nome_coluna | formula} [ASC | DESC] [,col ...]] [SEPARATOR valor_str])
Esta função foi adicionada na versão 4.1 do MariaDB. Ele retorna a string resultante contendo valores de um grupo:
mysql>
SELECT nome_estudante,
->GROUP_CONCAT(note_teste)
->FROM estudante
->GROUP BY nome_estudante;
ou mysql>SELECT nome_estudante,
->GROUP_CONCAT(DISTINCT nota_teste
->ORDER BY nota_teste DESC SEPARATOR ' ')
->FROM estudante
->GROUP BY nome_estudante;
No MariaDB você pode obter valores de combinações de expressões concatenados. Você pode eliminar valores duplicados utilizando
DISTINCT
. Se você quiser ordenar valores no resultado você deve utilizar a cláusulaORDER BY
. Para ordenar inversamente, adicione a palavra chaveDESC
(descendente) ao nome da coluna que você está ordenando na cláusulaORDER BY
. O padrão é a ordem crescente; pode-se também especificála explicitamente usando a palavra chaveASC
.SEPARATOR
é o valor string que deve ser inserido entre os valores no resultado. O padrão é um virgula ('','
'). Você pode remover o separador especificandoSEPARATOR ''
.Você pode definir um tamanho máximo permitido com a variável
group_concat_max_len
em sua configuração. A sintaxe para se fazer isto em tempo de execução é:SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
Se um tamanho máximo tiver sido atribuido, o resultado é truncado no seu tamanho máximo.
A função
GROUP_CONCAT()
é uma implementação aprimorada da função básicaLIST()
suportada pelo Sybase SQL Anywhere.GROUP_CONCAT()
é compatível com a funcionalidade extrwemamente limitada de deLIST()
, se utilizada em apenas uma coluna e nenhuma outra opção é especificada.LIST()
não tem uma ordem de classificação padrão.VARIANCE(expr)
Retorna a variância padrão de
expr
(considerando linha como toda a população, não com uma amostra; assim ele tem o número de linhas como denominador). Esta é uma extensão do SQL-99 (disponível somente a partir da versão 4.1).STD(expr)
,STDDEV(expr)
Retorna o desvio padrão de
expr
(a raiz quadrada deVARIANCE()
). Esta é uma extensão do SQL-99. O formatoSTDDEV()
desta função é fornecida para compatibilidade com Oracle.BIT_OR(expr)
Retorna o resultado da operação binária
OR
de todos os bits emexpr
. O calcululo é relizado com precisão de 64 bits (BIGINT
).A função retortna 0 se não houver registros coincidentes.
BIT_XOR(expr)
Retorna o bitwise
XOR
de todos os bits emexpr
. O calculo é relizado com precisão de 64-bits (BIGINT
).A função retorna 0 se não houver linhas coincidentes.
Esta função está disponível a partir do MariaDB.
BIT_AND(expr)
Retorna o resultado da operação binária
AND
de todos os bits emexpr
. O calcululo é relizado com precisão de 64 bits (BIGINT
).A função retortna 1 se não houver registros coincidentes.