前言:本文以学习记录的形式发表出来,前段时间苦于照模型聚合中group by 找了很久,官方文章中没有很明确的说出group by,但在文档中有提到!!!

正文(最后编辑于2016-11-12):

聚合:

LOrder.objects.values('com_chnl_name').annotate(Count('serv_id'))

#相当于select count(serv_id) from LOrder group by com_chnl_name

模型高级运用条件表达式+数据库函数:

条件表达式:

from django.db.models import IntegerField,Sum,When,Q,Case #模型执行查询集

LOrder.objects.values('com_chnl_name').annotate(

cdma=Sum(

Case(When(Q(prod_offer_name__contains='语音CDMA') & Q(service_offer_name='订购'),then=1),

output_field=IntegerField())

),

)

#相当于select sum(case when prod_offer_name like’%.语音CDMA %’ and service_offer_name='订购' then 1 end) , com_chnl_name from LOrder group by com_chnl_name,该SQL语句也算是SQL中的中级部分. 其中&相当于and 对应的|相当于or

问题:聚合函数得到的结果如果不存在,那么会返回None,这对于结果全是数字的话,进行数字加减乘除很不方便,所以运用数据库函数将None改为0,以下例子:

数据库函数和条件表达式一起运用:

from django.db.models import IntegerField,Sum,When,Q,Case,Value as V #模型执行查询集

from django.db.models.functions import Coalesce #模型部分:数据库函数

LOrder.objects.values('com_chnl_name').annotate(

cdma_dg=Coalesce(Sum(

Case(When(Q(prod_offer_name__contains='语音CDMA') & Q(service_offer_name='订购'),then=1),

output_field=IntegerField())

),V(0)),

Coalesce

class Coalesce(*expressions, **extra)[source]

接受一个含有至少两个字段名称或表达式的列表,返回第一个非空的值(注意空字符串不被认为是一个空值)。每个参与都必须是相似的类型,所以掺杂了文本和数字的列表会导致数据库错误。

使用范例:

>>> # Get a screen name from least to most public
>>> from django.db.models import Sum, Value as V
>>> from django.db.models.functions import Coalesce
>>> Author.objects.create(name='Margaret Smith', goes_by='Maggie')
>>> author = Author.objects.annotate(
... screen_name=Coalesce('alias', 'goes_by', 'name')).get()
>>> print(author.screen_name)
Maggie >>> # Prevent an aggregate Sum() from returning None
>>> aggregated = Author.objects.aggregate(
... combined_age=Coalesce(Sum('age'), V(0)),
... combined_age_default=Sum('age'))
>>> print(aggregated['combined_age'])
0
>>> print(aggregated['combined_age_default'])
None

最新文章

  1. 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳
  2. 纯Shading Language绘制HTML5时钟
  3. 转载文章----初识Ildasm.exe——IL反编译的实用工具
  4. js 生成笛卡尔积
  5. Memcache笔记03-php操作Memcached
  6. 浅谈MySQL索引背后的数据结构及算法(转载)
  7. .net分页控件webdiyer:AspNetPager
  8. 如何定时备份远程mysql数据库
  9. RedHat7配置IdM server
  10. java中的包装类
  11. 快速打出System.out.println("");
  12. ECSTORE 关于FILTER条件所代表的含义
  13. swift AVAudioPlayer播放音频时声音太小
  14. HashSet源码阅读
  15. MySQL中时间函数NOW()和SYSDATE()的区别
  16. 【数据结构】KMP算法
  17. 在IIS上发布并运行ASP.NET Core
  18. spring cloud gateway - RequestRateLimiter
  19. mysql授权远程访问
  20. Hibernate的配置文件,hibernate.cfg.xml

热门文章

  1. MapReduce 单词统计案例编程
  2. [WCF编程]4.契约概述
  3. 采花 bzoj 2743
  4. Gym 100703I---Endeavor for perfection(尺取)
  5. Cats(1)- 从Free开始,Free cats
  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)
  7. 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解
  8. javascript中的弹框
  9. 深入JavaScript:词法分析、连续赋值猜想
  10. Googlehack之Github hack