小编nep*_*tes的帖子

Django ORM版本的SQL COUNT(DISTINCT <column>)

我需要在简单的消息传递系统中填写一个模板,其中包含用户活动的摘要.对于每个邮件发件人,我想要发送的邮件数量和不同收件人的数量.

这是该模型的简化版本:

class Message(models.Model):
    sender = models.ForeignKey(User, related_name='messages_from')
    recipient = models.ForeignKey(User, related_name='messages_to')
    timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

这是我在SQL中如何做到这一点:

SELECT sender_id, COUNT(id), COUNT(DISTINCT recipient_id)
    FROM myapp_messages
    GROUP BY sender_id;
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关ORM查询中聚合的文档,虽然annotate()可以处理第一个COUNT列,但我没有看到获取COUNT(DISTINCT)结果的方法(甚至是额外的(select = {})没有工作,虽然它似乎应该).可以将其转换为Django ORM查询,还是应该坚持使用原始SQL?

sql django orm

10
推荐指数
1
解决办法
4804
查看次数

标签 统计

django ×1

orm ×1

sql ×1