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 Employee
e Department
do hr
aplicativo para a demonstração. Os modelos Employee
e Department
são mapeados para as tabelas hr_employee
e hr_department
:
Para iniciar o tutorial, você pode baixar o código-fonte do projeto aqui e seguir estas etapas:
Primeiro, adicione o salary
campo ao Employee
modelo:
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 makemigrations
comando:
python manage.py makemigrations
Linguagem de código: Python ( python )
Saída:
Migrations for 'hr':
hr\migrations\0005_employee_salary.py
- Add field salary to employee
Linguagem de código: Python ( python )
Terceiro, propague as alterações no banco de dados executando o migrate
comando:
python manage.py migrate
Linguagem 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... OK
Linguagem de código: Python ( python )
Finalmente, preencha os valores na salary
coluna com os dados do data.json
fixture:
python manage.py loaddata data.json
Linguagem 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 QuerySet
objeto fornece o
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:count()
>>> Employee.objects.count()
SELECT COUNT(*) AS "__count"
FROM "hr_employee"
Execution time: 0.002160s [Database: default]
220
Linguagem de código: Python ( python )
O count()
método usa a COUNT(*)
função SQL para retornar o número de linhas da hr_employee
tabela.
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 QuerySet
objeto 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]
29
Linguagem de código: Python ( python )
Neste caso, o filter()
método forma uma WHERE
clá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_employee
tabela 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_employee
e retorna o salário médio.
Soma
O
retorna a soma dos valores. Por exemplo, você pode usar Sum()
para calcular o salário total da empresa:Sum()
>>> 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_employee
tabela.
Resumo
- Use o
count()
método para obter o número de objetos de aQuerySet
. - 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.