第 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
我还需要 0 值用于仅出现在 1 个表中的活动和评论(NULL 可以正常工作)。
第 2 部分:Django
是否可以在不使用原始查询的情况下在 Django 中的单个查询中执行此操作?
将 Python 中的 2 个单独查询与 2 个 Django 查询集或 SQL 连接起来会更快吗?
我有存储在不同模型中的用户的活动和评论:
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'))
显然可以通过几种不同的方式来执行此操作,我正在尝试找到最快的方法来执行此操作,因为我正在处理 Activity 表中的超过 550 万条记录和 Comment 表中的超过 790k 条记录。