Django 如何实现 如下 联表 JOIN 查询?
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 查询?相关推荐
- MyBatis_Plus联表分页查询
MyBatis_Plus联表分页查询 当我们需要关联表格分页查询时,MyBatis_plus封装的单表方法已经满足不了我们的需求了,那么我们需要进行联表分页查询 假设我们需要的 SQL 语句如下: S ...
- 多表 JOIN 查询统计要记得去重
多表 JOIN 查询统计要记得去重 SELECT p.id projectId,ccr.commit_time changeDate,sum(ccr.line_count) changeLine,no ...
- mysql 多表 三表 删除_mysql 多表join查询索引优化
数据准备 CREATE TABLE IF NOT EXISTS `class` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `card` int( ...
- pagehelper联表分页查询
(springboot2.0.1.pagehelper5.1.4) pagehelper联表分页,会默认在sql语句的后面添加 limit ?,进行分页.如果是复杂的sql联表查询结果远远不能满足我们 ...
- JPA组合查询之AND和OR查询、多表JOIN查询、范围IN查询
Spring Data JPA 最近遇到的有关复杂查询,用复杂查询 Specification 处理. JPA组合复杂查询: And 和 Or 查询 多表连表查询 Join 范围查询 In 代码如下: ...
- Mysql两表 join 查询方式
一.SQL基本语法格式 SELECT DISTINCT< select_list > FROM< left_table > < join_type > JOIN & ...
- mycat 分表子查询_还不懂MyCat?一文带你深入剖析,实现MySQL读写分离
前言 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Myca ...
- java mongodb 多表关联查询,多条件查询,分页,排序
前言: 由于最近项目赶,版本迭代快,不知道大BOSS从哪里听别人说MongoDB用来做关系型数据库好,而且速度快,性能高:听到这话的我,立马就反驳了回去:"MongoDB不支持事物" ...
- 分布式数据库 Join 查询设计与实现浅析 | 京东云技术团队
相对于单例数据库的查询操作,分布式数据查询会有很多技术难题. 本文记录 Mysql 分库分表 和 Elasticsearch Join 查询的实现思路,了解分布式场景数据处理的设计方案. 文章从常用的 ...
最新文章
- iOS开发 - 线程与进程的认识与理解
- 关于 android 环信无法正确获取昵称的问题
- 第五篇 第二章社会单位消防安全管理
- SugarCRM 主表-自定义字段
- Oracle connet by prior 关键字的简单介绍和用法
- [云炬创业管理笔记]第三章测试3
- Python 操作 MySQL 数据库
- 树状数组基本用法详解
- axios 参数为payload的解决方法
- [jvm]运行时数据区域详解
- nginx服务器配置安全维护,nginx 安全:如何强化服务器配置
- Data Structures(Chapter 3 of The Algorithm Design Manual)
- php 抽象工厂模式,php设计模式(五)抽象工厂模式
- 递归算法的基本理解以及基本算法,多行注释详解,适合编程小白,刚接触递归的编程新手
- C++ 回调函数简单示例
- SpringBoot实现阿里云短信接口对接
- Win10怎么查找产品密钥? Win10产品密钥的3种查找方法
- 编译A-LOAM,catkin_make后PCL报错
- 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速-萌新入门
- Hive创建表的过程详细过程
热门文章
- 【译】Getting Up to Speed on Ethereum
- 深入了解以太坊虚拟机第5部分——一个新合约被创建后会发生什么
- 【分布式共识二】拜占庭将军问题----口头协议
- JNI实现源码分析【四 函数调用】
- Android开发:关于Android Settings中的八个问题
- 网页版登录入口_企业微信网页版怎么登录?企业微信客户端和网页版有什么区别?...
- linux 文件夹隐藏属性,Linux基础知识之文件隐藏属性
- Fuzzy c-means (FCM)聚类算法
- uvalive4838(凸包+重心)
- pyqt5窗口之间传递信号_pyQT5 实现窗体之间传值的示例