mysql - 在 MySQL 和 Django 中使用 Count 连接 2 个表

标签 mysql sql django django-models django-mysql

第 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 个 Django 查询集或 SQL 连接 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 万条记录和“评论”表中超过 79 万条记录。

最佳答案

如果我理解正确的话,你需要加入 2 个查询集。

试试这个答案:

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

如果这不是您想要的,并且您需要一些内部/外部 SQL 连接,也许您应该考虑执行一些 RAW SQL 。

关于mysql - 在 MySQL 和 Django 中使用 Count 连接 2 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357715/

相关文章:

MySQL group_concat() 按月排序

python - Object_list 在模板中未显示正确的数据

django - 如何在 Django admin 中实现多步骤表单

选定格式的 MySQL str_to_date 转换

php - PHP的MySQLi多查询重新排序自动增量ID

mysql - 如何获取mysql结果数组sum的数量

sql - 使用 Union all 收到错误

sql - Oracle嵌套xml解析

php - 查询带领带的排行榜

django - Nginx 403 禁止提供大图像