【Django】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_hash
tmp_dict['hostname'] = item.hostname
tmp_dict['status'] = item.status
from django.db.models import Sum
alarm_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_id
tmp_dict['alarm_sum'] = alarm_sum_group_items[]['alarm_sum'] if (len(alarm_sum_group_items)!=) else
ret.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=-)
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 end_time = datetime.now()
start_time = end_time + timedelta(days=-)
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 condition = {}
#condition['device_hash'] = data['device_hash']
condition['customer_id'] = customer_id
end_time = datetime.now()
#start_time = end_time + timedelta(days=-)
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 参考资料:
http://stackoverflow.com/questions/6481279/django-sum-query
参考资料:
DINSTINCT: http://www.w3school.com.cn/sql/sql_distinct.asp
RAW语句实现:http://yeelone.blog.51cto.com/1476571/946694
http://www.it165.net/database/html/201207/2755.html
http://stackoverflow.com/questions/21355601/django-orm-inner-join
http://djangobook.py3k.cn/2.0/chapter10/
http://blog.csdn.net/clh604/article/details/9789839
https://www.douban.com/note/301166150/
【Django】Django 如何实现 如下 联表 JOIN 查询?的更多相关文章
- Django 如何实现 如下 联表 JOIN 查询?
SQL语句: select distinct a.device_hash, sum(b.cmn_merge_count) from (select distinct device_hash from ...
- solr之高级查询--联表 join查询
例如有两个业务表:文章表,评论表 . 场景: 一个文章可以由多个人评论. 创建两个core,一个core叫article,一个叫comment.article实例的schema.xml文件中定义几个简 ...
- Django进阶Model篇006 - 多表关联查询
接着前面的例子,举例多表查询实例如下: 1.查询作战的所有完整信息. >>> AuthorDetail.objects.values('sex','email','address', ...
- springBootJpa 联表分页查询总数不准的问题
问题情景: 在联表查询时 ``` // 两张表关联查询 Join<Project, Plan> planJoin = root.join("plans", JoinTy ...
- 数据库联表统计查询 Group by & INNER JOIN
原数据表 视频信息表 tab_video_info 播放记录表 tab_play_record 需求 统计播放量(已经开始播放)最多的前20个视频: SELECT a.video_id, SUM( ...
- 基于Solr的多表join查询加速方法
前言 DT时代对平台或商家来说最有价值的就是数据了,在大数据时代数据呈现出数据量大,数据的维度多的特点,用户会使用多维度随意组合条件快速召回数据.数据处理业务场景需要实时性,需要能够快速精准的获得到需 ...
- SQL SERVER跨数据库服务,联表进行查询
SELECT * FROM 数据库A..表A a, 数据库B..表B b WHERE a.field=b.field
- 10 ORM 多表操作 查询
1.子查询:基于对象的跨表查询 def query(request): """ 跨表查询: 1.基于对象查询 2.基于双下划线查询 3.聚合.分组查询 4. F Q 查询 ...
- Django之model联表:一对多、跨表操作,联表查询
表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...
随机推荐
- MVC2 Area实现网站多级目录
Areas是ASP.NET Mvc 2.0版本中引入的众多新特性之一,它可以帮你把一个较大型的Web项目分成若干组成部分,即Area.实现Area的功能可以有两个组织形式: 在1个ASP.NET Mv ...
- [转]Java总结篇系列:Java泛型
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...
- codevs1227 方格取数2 注意数组啊啊啊啊啊啊啊啊啊啊
一开始T了一组RE了一组,实在找不出错来,就把数组加了一个0竟然就多A了一组.很惊讶的又加了几个0最后竟然全A了!!! 懒得做了,改的是之前的那个蚯蚓的游戏问题.还是需要拆点,至于为什么不能重复走结点 ...
- Java基础-字面值
在Java源代码中,字面值用于表示固定的值(fixed value).数值型的字面值是最常见的,字符串字面值可以算是一种,当然也可以把特殊的null当做字面值.字面值大体上可以分为整型字面值.浮点字面 ...
- 详解HTML中的window对象和document对象
Window -- 代表浏览器中一个打开的窗口: 对象属性 window //窗口自身 window.self //引用本窗户window=window.self window.name //为窗口命 ...
- 【kAri OJ604】圣哲的树
时间限制 1000 ms 内存限制 65536 KB 题目描述 果园大咖圣哲有12个棵树,其中有且仅有一个是有病的,有病的树比真的或轻或重,给出3次天平测量重量的结果,每次告知左侧和右侧的树各有哪几个 ...
- POJ3233 Matrix Power Series
Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. ...
- urllib2.URLError: <urlopen error [Errno 10061] >
今天来运行以前的python脚本,结果报这个错:urllib2.URLError: <urlopen error [Errno 10061] > 原来是因为 解决方法:打开IE浏览器,依次 ...
- HD1712ACboy needs your help(纯裸分组背包)
ACboy needs your help Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- UVa OJ 180 - Eeny Meeny
Time limit: 3.000 seconds限时3.000秒 Problem问题 In darkest <name of continent/island deleted to preve ...