SQL语句:select distinct a.device_hash, sum(b.cmn_merge_count) from
(select distinct device_hash from tbl_fileprotect_svc_instance where customer_id='3f500ac5-020d-3ce3-a2a2-51a59ddd606e')
as a left join tbl_file_protect_alarm as b on a.device_hash = b.device_hash group by a.device_hash;
简化SQL如下(把子查询转化为WHERE语句):复制代码
select distinct a.device_hash, sum(b.cmn_merge_count) from
tbl_fileprotect_svc_instance
as a left join tbl_file_protect_alarm as b on a.device_hash = b.device_hash
where a.customer_id='3f500ac5-020d-3ce3-a2a2-51a59ddd606e'
group by a.device_hash;select distinct a.device_hash, sum(b.cmn_merge_count) from  tbl_fileprotect_svc_instance as a left join tbl_file_protect_alarm as b on a.device_hash = b.device_hash where a.customer_id='3f500ac5-020d-3ce3-a2a2-51a59ddd606e' group by a.device_hash;select distinct a.device_hash, sum(b.cmn_merge_count) as alarm_sum from  tbl_fileprotect_svc_instance as a left join tbl_file_protect_alarm as b on a.device_hash = b.device_hash where a.customer_id='3f500ac5-020d-3ce3-a2a2-51a59ddd606e' group by a.device_hash;
复制代码Django代码:复制代码
TODO:
方法一:
ret = []
device_list = models.FILE_PROTECT_INSTANCE.objects.filter(customer_id=customer_id)
for item in device_list:tmp_dict = {}tmp_dict['device_hash'] = item.device_hashtmp_dict['hostname'] = item.hostnametmp_dict['status'] = item.status from django.db.models import Sumalarm_sum_group_items = models.FILE_PROTECT_ALARM.objects.filter(customer_id=customer_id).filter(device_hash=tmp_dict['device_hash']).values('device_hash').annotate(alarm_sum=Sum('cmn_merge_count'))#tmp_dict['customer_id'] = customer_idtmp_dict['alarm_sum'] = alarm_sum_group_items[0]['alarm_sum'] if (len(alarm_sum_group_items)!=0) else 0ret.append(tmp_dict)
复制代码方法二:hashes = A.objects.values_list("device_hash", flat=True).filter(customer_id="3f500ac5-020d-3ce3-a2a2-51a59ddd606e")B.objects.filter(device_hash__in=hashes).values_list("device_hash").annotate(Sum("cmn_merge_count"))SQL实现聚合查询统计(Sum,Count等)复制代码
from django.db.models import Sum#start_time = datetime.utcfromtimestamp(data['start_time']).replace(tzinfo=utc)#end_time = datetime.utcfromtimestamp(data['end_time']).replace(tzinfo=utc)end_time = datetime.now()start_time = end_time + timedelta(days=-1)condition['cmn_alert_time__range'] = (start_time, end_time)#alarm_sum_group_items_day = models.FILE_PROTECT_ALARM.objects.filter(**condition).values('customer_id').annotate(alarm_sum_day=Sum('cmn_merge_count'))alarm_sum_day = models.FILE_PROTECT_ALARM.objects.filter(**condition).aggregate(Sum("cmn_merge_count"))day_sum = alarm_sum_day['cmn_merge_count__sum'] if (alarm_sum_day['cmn_merge_count__sum'] is not None) else 0 end_time = datetime.now()start_time = end_time + timedelta(days=-7)condition['cmn_alert_time__range'] = (start_time, end_time)#alarm_sum_group_items_week = models.FILE_PROTECT_ALARM.objects.filter(**condition).values('customer_id').annotate(alarm_sum_week=Sum('cmn_merge_count'))alarm_sum_week = models.FILE_PROTECT_ALARM.objects.filter(**condition).aggregate(Sum("cmn_merge_count"))week_sum = alarm_sum_week['cmn_merge_count__sum'] if (alarm_sum_week['cmn_merge_count__sum'] is not None) else 0 condition = {}#condition['device_hash'] = data['device_hash']condition['customer_id'] = customer_idend_time = datetime.now()#start_time = end_time + timedelta(days=-7)condition['cmn_alert_time__lte'] = end_time#alarm_sum_group_items_all = models.FILE_PROTECT_ALARM.objects.filter(**condition).values('customer_id').annotate(alarm_sum_all=Sum('cmn_merge_count'))alarm_sum_all = models.FILE_PROTECT_ALARM.objects.filter(**condition).aggregate(Sum("cmn_merge_count"))all_sum = alarm_sum_all['cmn_merge_count__sum'] if (alarm_sum_all['cmn_merge_count__sum'] is not None) else 0 参考资料:
http://stackoverflow.com/questions/6481279/django-sum-query

  

转载于:https://www.cnblogs.com/pyxiaomangshe/p/7741612.html

Django 如何实现 如下 联表 JOIN 查询?相关推荐

  1. MyBatis_Plus联表分页查询

    MyBatis_Plus联表分页查询 当我们需要关联表格分页查询时,MyBatis_plus封装的单表方法已经满足不了我们的需求了,那么我们需要进行联表分页查询 假设我们需要的 SQL 语句如下: S ...

  2. 多表 JOIN 查询统计要记得去重

    多表 JOIN 查询统计要记得去重 SELECT p.id projectId,ccr.commit_time changeDate,sum(ccr.line_count) changeLine,no ...

  3. mysql 多表 三表 删除_mysql 多表join查询索引优化

    数据准备 CREATE TABLE IF NOT EXISTS `class` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `card` int( ...

  4. pagehelper联表分页查询

    (springboot2.0.1.pagehelper5.1.4) pagehelper联表分页,会默认在sql语句的后面添加 limit ?,进行分页.如果是复杂的sql联表查询结果远远不能满足我们 ...

  5. JPA组合查询之AND和OR查询、多表JOIN查询、范围IN查询

    Spring Data JPA 最近遇到的有关复杂查询,用复杂查询 Specification 处理. JPA组合复杂查询: And 和 Or 查询 多表连表查询 Join 范围查询 In 代码如下: ...

  6. Mysql两表 join 查询方式

    一.SQL基本语法格式 SELECT DISTINCT< select_list > FROM< left_table > < join_type > JOIN & ...

  7. mycat 分表子查询_还不懂MyCat?一文带你深入剖析,实现MySQL读写分离

    前言 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Myca ...

  8. java mongodb 多表关联查询,多条件查询,分页,排序

    前言: 由于最近项目赶,版本迭代快,不知道大BOSS从哪里听别人说MongoDB用来做关系型数据库好,而且速度快,性能高:听到这话的我,立马就反驳了回去:"MongoDB不支持事物" ...

  9. 分布式数据库 Join 查询设计与实现浅析 | 京东云技术团队

    相对于单例数据库的查询操作,分布式数据查询会有很多技术难题. 本文记录 Mysql 分库分表 和 Elasticsearch Join 查询的实现思路,了解分布式场景数据处理的设计方案. 文章从常用的 ...

最新文章

  1. iOS开发 - 线程与进程的认识与理解
  2. 关于 android 环信无法正确获取昵称的问题
  3. 第五篇 第二章社会单位消防安全管理
  4. SugarCRM 主表-自定义字段
  5. Oracle connet by prior 关键字的简单介绍和用法
  6. [云炬创业管理笔记]第三章测试3
  7. Python 操作 MySQL 数据库
  8. 树状数组基本用法详解
  9. axios 参数为payload的解决方法
  10. [jvm]运行时数据区域详解
  11. nginx服务器配置安全维护,nginx 安全:如何强化服务器配置
  12. Data Structures(Chapter 3 of The Algorithm Design Manual)
  13. php 抽象工厂模式,php设计模式(五)抽象工厂模式
  14. 递归算法的基本理解以及基本算法,多行注释详解,适合编程小白,刚接触递归的编程新手
  15. C++ 回调函数简单示例
  16. SpringBoot实现阿里云短信接口对接
  17. Win10怎么查找产品密钥? Win10产品密钥的3种查找方法
  18. 编译A-LOAM,catkin_make后PCL报错
  19. 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速-萌新入门
  20. Hive创建表的过程详细过程

热门文章

  1. 【译】Getting Up to Speed on Ethereum
  2. 深入了解以太坊虚拟机第5部分——一个新合约被创建后会发生什么
  3. 【分布式共识二】拜占庭将军问题----口头协议
  4. JNI实现源码分析【四 函数调用】
  5. Android开发:关于Android Settings中的八个问题
  6. 网页版登录入口_企业微信网页版怎么登录?企业微信客户端和网页版有什么区别?...
  7. linux 文件夹隐藏属性,Linux基础知识之文件隐藏属性
  8. Fuzzy c-means (FCM)聚类算法
  9. uvalive4838(凸包+重心)
  10. pyqt5窗口之间传递信号_pyQT5 实现窗体之间传值的示例