Mistura de funções de agregação em MySQL

Escrito por j.t. barett | Traduzido por guilherme vieira
  • Compartilhar
  • Tweetar
  • Compartilhar
  • Pin
  • E-mail
Mistura de funções de agregação em MySQL
Funções de agregação em MySQL rapidamente calculam estatísticas em grandes conjuntos de dados (Thinkstock Images/Comstock/Getty Images)

O sistema de gerenciamento de banco de dados de código aberto (open source) MySQL usa a linguagem padrão da indústria, SQL, para transações de dados e manutenção do banco. Assim como outros dialetos da SQL, MySQL oferece um conjunto de funções de agregação que aplicam contas estatísticas em grupos de dados. Você pode misturar essas funções com cálculos comuns em seus programas, mas apenas sob certas condições.

Outras pessoas estão lendo

Funções agregadas

Embora a maioria das funções matemáticas da SQL façam cálculos em uma tupla de cada vez, funções de agregação retornam resultados para todos os registros em conjuntos de dados ou em grupos de registros em um conjunto. Por exemplo, a função "AVG()" calcula a média dos valores no campo especificado em todos os registros retornados por uma sentença "SELECT", como o código a seguir ilustra:

SELECT AVG(vendas_totais) FROM clientes WHERE estado = 'SP';

Essa sentença mostra a média total de vendas para todos os clientes no estado de São Paulo. Ela mostra um único número. Você também pode separar as médias por estado, como na sentença a seguir:

SELECT estado, AVG(vendas_totais) FROM clientes GROUP BY estado;

Essa consulta mostra uma linha por estado, dando a média de vendas para todos os clientes em cada estado.

Matemática padrão

As funções matemáticas padrão no MySQL incluem adição, subtração, multiplicação, divisão, trigonometria, exponenciais e muitas outras. Para cada campo em uma tabela, o MySQL executa as contas para cada registro. Por exemplo, para mostrar o total de vendas para um registro de pedidos, você pode multiplicar o preço unitário pela quantidade pedida, como a SQL abaixo mostra:

SELECT preco_unitario, qtd_pedida, preco_unitario*qtd_pedida FROM pedidos;

No entanto, a sentença SQL a seguir não funciona:

SELECT preco_unitario*qtd_pedida, AVG(preco_unitario) FROM pedidos;

Essa sentença tenta misturar funções de agregação com matemática padrão de uma forma indevida. A função AVG() retorna um único valor, embora o cálculo de preco_unitario*qtd_pedida possa retornar milhares. Você não pode ter as duas formas em uma única sentença.

Misturando agregações

Você pode usar várias funções em uma única sentença SQL. Isso funciona porque cada agregação retorna um único valor. Por exemplo, se você quer a média, o menor e o maior valor de uma uma tabela de pedidos, poderia usar a seguinte sentença:

SELECT AVG(preco_unitario), MIN(preco_unitario), MAX(preco_unitario) FROM pedidos;

Misturando agregações com funções e campos padrão

Você mistura agregações com campos padrão agrupando registros, como mostra a seguinte sentença:

SELECT numero_produto, AVG(preco_unitario), MIN(preco_unitario), MAX(preco_unitario) FROM pedidos GROUP BY numero_produto;

Isso mostra uma linha por número de produto, mostrando o produto com a média de preços além do menor e do maior preço. Você pode misturar matemática comum com funções de agregação enquanto mantiver registros agrupados, assim como na SQL a seguir:

SELECT numero_produto, custo_por_m / 1000, AVG(preco_unitario), MIN(preco_unitario), MAX(preco_unitario) FROM pedidos GROUP BY numero_produto;

Essa sentença calcula o preço de um único item baseado em uma coluna "custo_por_m", ou custo por milhar, e mostra junto com a média dos preços, o maior e o menor. Você pode misturar funções padrão com funções de agregação se a função padrão se aplicar às de agregação, como mostra o exemplo:

SELECT AVG(preco_unitario), COUNT(preco_unitario), AVG(preco_unitario) * COUNT(preco_unitario) FROM pedidos;

Aqui, a sentença SELECT multiplica o resultado de AVG e de COUNT.

Não perca

Filtro:
  • Geral
  • Artigos
  • Slides
  • Vídeos
Mostrar:
  • Mais relevantes
  • Mais lidos
  • Mais recentes

Nenhum artigo disponível

Nenhum slide disponível

Nenhum vídeo disponível