django

django查询之聚合函数

2018-09-01  本文已影响316人  陆_志东

Django 的django.db.models 模块提供以下聚合函数。
警告
SQLite 不能直接处理日期/时间字段的聚合。这是因为SQLite 中没有原生的日期/时间字段,Django 目前使用文本字段模拟它的功能。在SQLite 中对日期/时间字段使用聚合将引发NotImplementedError。
:
在QuerySet 为空时,聚合函数函数将返回None。 例如,如果QuerySet 中没有记录,Sum 聚合函数将返回None 而不是0。Count 是一个例外,如果QuerySet 为空,它将返回0

聚合函数的参数:

所有聚合函数具有以下共同的参数:
function 描述将生成的函数的类属性,函数将会替template中函数占位符
template 类属性,作为格式字符串,描述此函数生成的sql语句,默认为'%(function)s(%(expressions)s)'
arg_joiner 类属性,表示用于连接表达式列表的字符,默认为","
expressions  对模型哪个字段进行聚合,字符串格式的字段名,可以是多个字段
              在填充到template中之前会使用arg_joiner进行join拼接
output_field 当聚合的多个字段拥有相同的值类型,不需要指定output_field ,
             若类型不相同,就需要通过output_field 指定返回的字段类型
**extra  这些关键字参数可以给聚合函数生成的SQL 提供额外的信息。

聚合函数

avg函数

class Avg(expression, output_field=None, **extra):
  返回给定expression 的平均值,其中expression 字段的类型必须为数值。expression指的是模型字段

  默认的别名:<field>__avg
  返回类型:float

示例:
from django.db.models import Func, F
queryset = Students.objects.all()   
queryset.annotate(field_lower=Func(F('field'), function='Avg'))
也可以
queryset.annotate(field_lower=Avg(F('field'))  
# field_lower 是手动指定的返回的字段名,可以通过实例.field_lower 获取平均值

Count函数

class Count(expression, distinct=False, **extra):
  返回与expression 相关的对象的个数。
  默认的别名:<field>__count
  返回类型:int
  有一个可选的参数:
  distinct  如果distinct=True,Count 将只计算唯一的实例。
  它等同于COUNT(DISTINCT <field>) SQL 语句。默认值为False。

Max函数

class Max(expression, output_field=None, **extra):
  返回expression 的最大值。
  默认的别名:<field>__max
  返回类型:与输入字段的类型相同,如果设置了output_field属性则为 output_field 类型

Min函数

class Min(expression, output_field=None, **extra):
  返回expression 的最小值。
  默认的别名:<field>__min
  返回的类型:与输入字段的类型相同,如果提供则为 output_field 类型

StdDev函数

class StdDev(expression, sample=False, **extra):
  返回expression 的标准差。
  默认的别名:<field>__stddev
  返回类型:float
  有一个可选的参数:sample 
  默认情况下,StdDev 返回群体的标准差。但是,如果sample=True,返回的值将是样本的标准差。
  SQLite 没有直接提供StdDev,如果想要使用请百度解决办法

Sum函数

class Sum(expression, output_field=None, **extra):
  计算expression 的所有值的和。
  默认的别名:<field>__sum
  返回类型:与输入的字段相同,如果提供则为output_field 的类型

Variance 函数

class Variance(expression, sample=False, **extra):
  返回expression 的方差。
  默认的别名:<field>__variance
  返回的类型:float
  有一个可选的参数:sample
  默认情况下,Variance 返回群体的方差。但是,如果sample=True,返回的值将是样本的方差。
  SQLite 没有直接提供Variance。使用请百度解决方案
上一篇下一篇

猜你喜欢

热点阅读