第1部分: MySQL
如何从MySQL数据库中加入以下两个计数
SELECT COUNT(activity_id) as activities, user_id FROM Activity
WHERE activity_completed_time IS NOT NULL
AND group = somevalue
GROUP BY user_id;
SELECT COUNT(id) as comments, author_id FROM Comment
WHERE group = somevalue
GROUP BY author_id;这些查询返回两个单独的表,但我应该能够在Activity.user_id = Comment.author_id上加入它们。
第一个查询提供:
activities | user_id第二个查询提供:
comments | author_id我想返回的是:
user_id | activities | comments对于仅出现在1个表中的活动和注释,我还需要0值(NULL可以正常工作)。
第2部分: Django
那么,在Django中的一个查询中不使用原始查询就能做到这一点吗?
用2 Django查询集或SQL连接Python中的2个单独查询会更快吗?
我在单独的模型中为用户提供了活动和评论:
class Activity(models.Model):
user_id = models.CharField(max_length=50, primary_key=True)
activity_id = models.CharField(max_length=5)
activity_completed_time = models.DateTimeField()
group = models.CharField(max_length=70, primary_key=True)
class Comment(models.Model):
id = models.IntegerField(primary_key=True)
author_id = models.CharField(max_length=50)
group = models.CharField(max_length=70, primary_key=True)具有返回必要数据的条件的两个单独查询是:
Activity.objects.values('user_id')
.filter(group='value')
.filter(activity_completed_time__isnull = false)
.annotate('total_completed' = Count('activity_id'))
Comment.objects.values('author_id')
.filter(group='value')
.annotate('total_comments' = Count('id'))显然可以通过几种不同的方式来实现这一点,我试图找到最快的方法,因为我正在处理活动表中的550万条记录和注释表中的超过790k条记录。
发布于 2017-04-12 08:04:36
如果我正确理解了这一点,您需要加入2个查询集。
试试这个答案:
How to combine 2 or more querysets in a Django view?
如果这不是您想要的,并且您需要一些内部/外部SQL联接,那么您可能应该考虑执行一些原始SQL。
https://stackoverflow.com/questions/43357715
复制相似问题