首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL和Django中用Count连接2个表

在MySQL和Django中用Count连接2个表
EN

Stack Overflow用户
提问于 2017-04-11 23:16:18
回答 1查看 1.4K关注 0票数 0

第1部分: MySQL

如何从MySQL数据库中加入以下两个计数

代码语言:javascript
复制
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上加入它们。

第一个查询提供:

代码语言:javascript
复制
activities | user_id

第二个查询提供:

代码语言:javascript
复制
comments | author_id

我想返回的是:

代码语言:javascript
复制
user_id | activities | comments

对于仅出现在1个表中的活动和注释,我还需要0值(NULL可以正常工作)。

第2部分: Django

那么,在Django中的一个查询中不使用原始查询就能做到这一点吗?

用2 Django查询集或SQL连接Python中的2个单独查询会更快吗?

我在单独的模型中为用户提供了活动和评论:

代码语言:javascript
复制
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)

具有返回必要数据的条件的两个单独查询是:

代码语言:javascript
复制
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条记录。

EN

回答 1

Stack Overflow用户

发布于 2017-04-12 08:04:36

如果我正确理解了这一点,您需要加入2个查询集。

试试这个答案:

How to combine 2 or more querysets in a Django view?

如果这不是您想要的,并且您需要一些内部/外部SQL联接,那么您可能应该考虑执行一些原始SQL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43357715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档