美文网首页django
django查询之聚合函数

django查询之聚合函数

作者: 陆_志东 | 来源:发表于2018-09-01 23:31 被阅读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。使用请百度解决方案
    

    相关文章

      网友评论

        本文标题:django查询之聚合函数

        本文链接:https://www.haomeiwen.com/subject/sgqpwftx.html