zoukankan      html  css  js  c++  java
  • Django annotate 时 group by 有额外的字段

    Django  annotate 时 group by 有额外的字段

    真的是,痛苦了我好久的一个问题,一直找不到原因,查了好多都没找到,终于在简书里面找到了类似的

    描述:

    class Encounter(models.Model):
        activity_type = models.CharField(max_length=2, 
                               choices=(('ip','ip'), ('op','op'), ('ae', 'ae')))
        cost = models.DecimalField(max_digits=8, decimal_places=2)
    
        class Meta:
            order_by = "cost"

    查询语句如下:

    Encounter.objects.values('activity_type').annotate(Sum('cost'))

    打印出sql语句:

    SELECT "encounter_encounter"."activity_type", 
        SUM("encounter_encounter"."total_cost") AS "total_cost__sum" 
        FROM "encounter_encounter" 
        GROUP BY "encounter_encounter"."activity_type", 
                 "encounter_encounter"."total_cost"        <<<< THIS MESSES THINGS
        ORDER BY "encounter_encounter"."total_cost" DESC

    原因:
    虽然在查询中没有明确说明,但是模型的Meta类中的默认排序被添加到查询中,然后将其添加到group by子句中,因为SQL需要这样。

    解决方案是删除默认排序或添加空order_by()重置顺序:

    >>> Encounter.objects.values('activity_type').annotate(Sum('cost')).order_by()


    作者:Sunnky
    链接:https://www.jianshu.com/p/3cbcc16b707e
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    .net中使用JQuery Ajax判断用户名是否存在的方法
    简单的SqlHelper
    C#中邮件的发送基本操作
    身份证号码组成 含代码
    C#和asp.net中链接数据库中 参数的几种传递方法
    【转】iptables 命令介绍
    sed的替换命令
    【转】sed 的参数
    【转】sed正则表达式
    【转】shell中如何判断一个变量是否为空
  • 原文地址:https://www.cnblogs.com/pywjh/p/13691905.html
Copyright © 2011-2022 走看看