Articles

SQLShack

Posted on

Neste artigo, vamos aprender a função SQL Average que é conhecida como função AVG() no T-SQL. A função AVG() é uma função agregada que calcula o valor médio de um conjunto de dados numéricos que retorna da instrução SELECT.

Introduction

Assumir que temos uma colecção de números. Em primeiro lugar, somamos todos os membros da colecção e depois dividimos o número total de membros da colecção. Como resultado, o número obtido será a média. Vamos explicar esta noção matemática com um exemplo simples.

John é estudante na universidade e decide registar as suas despesas todos os dias. O seguinte quadro e tabela representam as despesas de John na última semana.

Cálculo da média em matemática

Cálculo da média em matemática

Agora, vamos calcular a despesa média de John na última semana. No primeiro, somaremos todas as despesas da semana acima mencionada.

($20+$60+$20+$42+$10+$15+$8) = $175 é o montante total das despesas da semana.

Na segunda etapa, dividiremos o montante total das despesas em 7 porque esta colecção é formada por 7 membros. Por outras palavras, uma semana consiste em sete dias.

$175 / 7 = $25 é a despesa média da semana.

Após discutir o conceito matemático da média, vamos continuar a aprender o básico da função AVG() em SQL.

Data Preparation

Com a ajuda da seguinte consulta, vamos criar a tabela WeekExpense e depois inserir as despesas de 3 semanas de John. Vamos utilizar esta tabela em todos os exemplos deste artigo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

/td>

CREATE TABLE Weekte expense
( WeekNumber VARCHAR(20),WeekDayName VARCHAR(50), Expense MONEY)
INSERT INTO WeekExpense
VALUES
(‘Week05′,’Monday’, 20 ),
( ‘Week05′,’Tuesday’, 60 ),
( ‘Semana05’, ‘Quarta’, 20 ),
( ‘Semana05’, ‘Quinta’, 42 ),
( ‘Semana05’, ‘Sexta’, 10 ),
( ‘Semana05’, ‘Sábado’, 15 ) ,
( ‘Semana05’, ‘Domingo’, 8 ),
(‘Semana04’, ‘Segunda-feira’, 29 ),
( ‘Semana04’, ‘Terça-feira’, 17 ),
( ‘Semana04’, ‘Quarta’, 42 ),
( ‘Semana04’, ‘Quinta’, 11 ),
( ‘Semana04’, ‘Sexta’, 43 ),
( ‘Semana04’, ‘Sábado’, 10 ) ,
( ‘Semana04’, ‘Domingo’, 15 ),
(‘Semana03’, ‘Segunda-feira’, 10 ),
( ‘Semana03’, ‘Terça-feira’, 32 ),
( ‘Semana03’, ‘Quarta-feira’, 35 ),
( ‘Semana03’, ‘Quinta’, 19 ),
( ‘Semana03’, ‘Sexta-feira’, 30 ),
( ‘Semana03’, ‘Sábado’, 10 ) ,
( ‘Semana03’, ‘Domingo’, 15 )
GO
SELECT *
DA SemanaDespesa

Mesa de despesas da semana resultset

Semana Tabela de despesas resultset

SQL Sintaxe da função média

AVG() a função de sintaxe parecerá a seguinte na sua forma simples:

1
2
3

SELECT AVG ( nome da coluna )
DE TABLENAME
ONDE CONDIÇÃO

TODAS as palavras-chave permitem-nos calcular uma média para todos os valores do conjunto de resultados e é utilizada por defeito. A palavra-chave DISTINCT implementa a função AVG() apenas para valores únicos.

AVG() exemplo de função

A seguinte consulta irá calcular a despesa média de John com a ajuda da função AVG().

SELECT AVG(Expense) AS
DA DESPESA SEMANA
WHERE WeekNumber = ‘Week05’

1
2
3

Um exemplo simples da função AVG()

A exemplo simples da função AVG()

A imagem seguinte ilustra a metodologia de cálculo da função AVG() por defeito de utilização.

Ilustração da função média SQL

Ilustração da função média SQL

Como podemos ver, o AVG() considera todos os valores de dias de semana e fins de semana no seu cálculo. Além disso, podemos obter o mesmo resultado quando adicionamos a palavra-chave ALL à sintaxe.

1
2
3

SELECT AVG(ALL Expense) AS
DA SEMANADespesa
WHERE WeekNumber =’Week05′

Um exemplo simples da função AVG() com TODAS as palavras-chave

Um exemplo simples da função AVG() com TODAS as palavras-chave

Se quisermos ignorar valores duplicados durante o cálculo da função AVG(), podemos usar a palavra-chave DISTINCT. Depois de executar a consulta abaixo, vamos analisar o resultado:

1
2
3

SELECT AVG(DISTINCT Expense) AS
DA DESPESA SEMANA
ONDE SemanaNúmero =’Semana05′

Um exemplo simples da função AVG() com a palavra-chave DISTINCT

Um exemplo simples da função AVG() com a palavra-chave DISTINCT

A palavra-chave DISTINCT elimina os valores duplicados, portanto, tem em conta apenas uma das despesas cujos valores são de 20 dólares no cálculo. A imagem seguinte ilustra basicamente o mecanismo de funcionamento da palavra-chave DISTINCT.

Ilhustração da função média SQL com a palavra-chave DISTINCT

Ilhustração da função média SQL função com a palavra-chave DISTINCT

SQL Função média e valores NULL

função AVG() não considera os valores NULL durante o seu cálculo. Agora, vamos estudar um exemplo desta questão. No início, actualizaremos as despesas de domingo como NULL na tabela de Despesas da Semana.

1
2
3
4
5

ACTUALIZAR SemanaDespesas
SET
Despesas = NULL
WHERE WeekDayName = ‘Domingo’ AND
WeekNumber = ‘Week05’

Agora, executaremos a seguinte consulta, a fim de calcular o valor médio.

SELECT AVG(Expense) AS
DA DESPESA SEMANA
WHERE WeekNumber =’Week05′

1
2
3

AVG() exemplo de função resultado

AVG() exemplo de função resultado

Como podemos ver, o valor NULL não foi tido em conta pela função AVG() no cálculo. A imagem seguinte ilustra o método de cálculo:

Ilustração da função SQL média e interacção das expressões NULL

Ilustração da função SQL média e interacção das expressões NULL

Se quisermos incluir os valores NULL no cálculo, podemos utilizar a função ISNULLL. A função ISNULL é utilizada para alterar os valores NULL para os valores definidos. Assim, vamos executar o seguinte para incluir as expressões NULL no cálculo.

1
2
3

SELECT AVG(ISNULL(Despesa),0)) AS
DA SemanaDespesa
WHERE WeekNumber =’Week05′

Utilização da função AVG() com ISNULL

Utilização da função AVG() com ISNULLL

A imagem seguinte ilustra o método de cálculo da consulta anterior:

Como eliminar os valores NULL na função média SQL

Como eliminar os valores NULL na função média SQL

Neste ponto, devemos salientar aqui que incluímos a expressão NULL no cálculo como 0.

SQL Utilização média da função com declaração GROUP BY

A declaração GROUP BY é utilizada para agrupar os dados e é utilizada principalmente com funções agregadas.

John decidiu calcular a despesa média de todas as semanas. Para tratar do problema de John, precisamos de usar a declaração GROUP BY e a função AVG() ao mesmo tempo. A consulta seguinte irá calcular a despesa média de cada semana individual.

SELECT WeekNumber, AVG(Expense) AS
DA SemanaDespesa
GRUPO POR SemanaNúmero
ORDEM POR SemanaNúmero DESC

1
2
3
4

AVG() utilização da função com GROUP BY statment

AVG() utilização da função com GROUP BY statment

Quando tivermos dado uma vista de olhos ao conjunto de resultados da consulta, podemos ver que as médias foram calculadas para todas as semanas separadamente.

Bonus Tip: Detalhes do plano de execução da função SQL Média

O plano de execução ajuda a compreender os detalhes de execução de uma consulta. Quando analisamos o plano de execução de uma consulta, podemos obviamente compreender o que se passa nos bastidores.

Agora, analisaremos a seguinte consulta plano de execução real com o ApexSQL Plan para que possamos compreender claramente o que acontece nos bastidores da função AVG().

1
2

>/td>>>>>

SELECT AVG(Despesa) AS
DA SemanaDespesa

O plano de execução visual da consulta é mostrado como abaixo:

AVG() function execution plan

O scan da tabela lê todas as linhas das tabelas porque não criamos nenhum índice nesta tabela. No passo seguinte, o operador agregado Stream calcula a soma e o valor de contagem das expressões.

O operador agregado Stream

Compute scalar toma estas expressões do agregado Stream e calcula o valor médio através da seguinte fórmula.

1
2
3
4
5

CASE
QUANDO = (0)
ENTÃO NULL
ELSE / CONVERT_IMPLICIT(money, 0)
END

Compute scalar operator

Nesta fórmula, devemos comentar um ponto. Quando o número total das expressões retornar 0, o cálculo médio retornará NULL. Se o número total de expressões retorna 0, o valor médio será NULL. A principal intenção disto é evitar a divisão por erro zero.

Conclusão

Neste artigo, aprendemos a função SQL Média e reforçámos a nossa aprendizagem com exemplos e ilustrações básicas. Ao longo do caminho, discutimos os detalhes do plano de execução da função AVG().

  • Autor
  • Posts recentes
Esat Erkec
Esat Erkec é um profissional do SQL Server que iniciou a sua carreira há mais de 8 anos como Programador de Software. É um Perito em Soluções Certificadas SQL Server Microsoft.
A maior parte da sua carreira tem estado centrada na Administração e Desenvolvimento de Base de Dados do SQL Server. Os seus interesses actuais são a administração de bases de dados e Business Intelligence. Pode encontrá-lo no LinkedIn.
Ver todos os posts de Esat Erkec

Esat Erkec
Latest posts de Esat Erkec (ver todos)
  • Mitos de Optimização de Consultas – 23 de Março, 2021
  • Sintomas de Farejamento de Parâmetros no SQL Server – 17 de Março de 2021
  • Usando a Correcção Automática do Plano para Afinação de Consultas – 4 de Março de 2021

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *