Agregado Django

Resumo : neste tutorial, você aprenderá como usar o Django para obter os valores agregados do banco de dados, incluindo contagem, mínimo, máximo, soma e média.

Preparando dados

Usaremos os modelos Employeee Departmentdo hraplicativo para a demonstração. Os modelos Employeee Departmentsão mapeados para as tabelas hr_employeee hr_department:

Para iniciar o tutorial, você pode baixar o código-fonte do projeto aqui e seguir estas etapas:

Primeiro, adicione o salarycampo ao Employeemodelo:

class Employee(models.Model):

    salary = models.DecimalField(max_digits=15, decimal_places=2)
    # ...Linguagem de código:  Python  ( python )

Segundo, faça migrações usando o makemigrationscomando:

 python manage.py makemigrationsLinguagem de código:  Python  ( python )

Saída:

Migrations for 'hr':
  hr\migrations\0005_employee_salary.py
    - Add field salary to employeeLinguagem de código:  Python  ( python )

Terceiro, propague as alterações no banco de dados executando o migratecomando:

python manage.py migrateLinguagem de código:  Python  ( python )

Saída:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, hr, sessions
Running migrations:
  Applying hr.0005_employee_salary... OKLinguagem de código:  Python  ( python )

Finalmente, preencha os valores na salarycoluna com os dados do data.jsonfixture:

python manage.py loaddata data.jsonLinguagem de código:  Python  ( python )

Baixe o código-fonte completo do projeto aqui.

Introdução ao agregado Django

Uma função agregada aceita uma lista de valores e retorna um único valor. As funções agregadas comumente usadas são contagem, máximo, mínimo, média e soma.

Contar

O QuerySetobjeto fornece o count()método que retorna o número de objetos que ele contém. Por exemplo, você pode usar o count()método para obter o número de funcionários:

>>> Employee.objects.count()
SELECT COUNT(*) AS "__count"
  FROM "hr_employee"        
Execution time: 0.002160s [Database: default]
220Linguagem de código:  Python  ( python )

O count()método usa a COUNT(*)função SQL para retornar o número de linhas da hr_employeetabela.

Para obter o número de funcionários cujos nomes começam com a letra J, você pode usar os métodos filter()e count()do QuerySetobjeto como este:

>>> Employee.objects.filter(first_name__startswith='J').count()
SELECT COUNT(*) AS "__count"
  FROM "hr_employee"
 WHERE "hr_employee"."first_name"::text LIKE 'J%'
Execution time: 0.000000s [Database: default]
29Linguagem de código:  Python  ( python )

Neste caso, o filter()método forma uma WHEREcláusula enquanto o count()método forma a COUNT()função.

Máx.

O Max()retorna o valor máximo em um conjunto de valores. Ele aceita uma coluna que você deseja obter o valor mais alto.

Por exemplo, o seguinte usa Max()para retornar o salário mais alto:

>>> Employee.objects.aggregate(Max('salary'))
SELECT MAX("hr_employee"."salary") AS "salary__max"
  FROM "hr_employee"
Execution time: 0.002001s [Database: default]
{'salary__max': Decimal('248312.00')}Linguagem de código:  Python  ( python )

O Max()executa o SQL MAX()na coluna salário da hr_employeetabela e retorna o maior salário.

Mínimo

O Min()retorna o valor mínimo em um conjunto de valores. Assim como o Max(), ele aceita uma coluna que você deseja obter o valor mais baixo.

O exemplo a seguir usa Min()para retornar o salário mais baixo dos funcionários:

>>> Employee.objects.aggregate(Min('salary')) 
SELECT MIN("hr_employee"."salary") AS "salary__min"
  FROM "hr_employee"
Execution time: 0.002015s [Database: default]
{'salary__min': Decimal('40543.00')}Linguagem de código:  Python  ( python )

A Min()função executa a MIN()função SQL que retorna o valor mínimo na coluna salário.

Média

O Avg()retorna o valor médio em um conjunto de valores. Ele aceita um nome de coluna e retorna o valor médio de todos os valores dessa coluna:

>>> Employee.objects.aggregate(Avg('salary')) 
SELECT AVG("hr_employee"."salary") AS "salary__avg"
  FROM "hr_employee"
Execution time: 0.005468s [Database: default]
{'salary__avg': Decimal('137100.490909090909')}Linguagem de código:  Python  ( python )

Nos bastidores, o Avg()executa a AVG()função SQL na coluna salário do hr_employeee retorna o salário médio.

Soma

O Sum()retorna a soma dos valores. Por exemplo, você pode usar Sum()para calcular o salário total da empresa:

>>> Employee.objects.aggregate(Sum('salary')) 
SELECT SUM("hr_employee"."salary") AS "salary__sum"
  FROM "hr_employee"
Execution time: 0.000140s [Database: default]
{'salary__sum': Decimal('30162108.00')}Linguagem de código:  Python  ( python )

O Sum()executa a função SQL SUM()e retorna o valor total de todos os valores da coluna salário da hr_employeetabela.

Resumo

  • Use o count()método para obter o número de objetos de a QuerySet.
  • Use o Max()para obter o valor máximo em um conjunto de valores.
  • Use o Min()para obter o valor mínimo em um conjunto de valores.
  • Use o Avg()para obter o valor médio em um conjunto de valores.
  • Use o Sum()para obter o valor total de um conjunto.

Deixe um comentário

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