如何将此原始SQL转换为Django ORM

2024-04-20 10:47:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把下面的原始sql代码改成Django ORM。 我该怎么办?你知道吗

SELECT ad_id, count(distinct(user_id))
FROM reachcount
GROUP BY ad_id;

我喜欢这个

queryset = ReachCount.objects.values('ad_id').annotate(Count('user_id',distinct=True))

但这不是我想要的结果。所以我用查询集.query. 下面的代码是原始代码

SELECT `test_reachcount`.`ad_id`, COUNT(DISTINCT `test_reachcount`.`user_id`) AS `user_id__count` 
FROM `test_reachcount` 
GROUP BY `test_reachcount`.`ad_id`, `test_reachcount`.`user_id` 
ORDER BY `test_reachcount`.`ad_id` ASC, `test_reachcount`.`user_id` ASC

如果我去掉groupby子句中的“test_reachcount.user_id”。 我想这个代码和我想要的相似。你知道吗

让我们总结一下这个问题。你知道吗

  1. 为什么test_reachcount.user_id会自动添加?你知道吗
  2. 如何摆脱test_reachcount.user_id代码。你知道吗
  3. 如果你把代码做得更好。请分享我。你知道吗

谢谢你阅读这个长问题。你知道吗

我的模特是这样的

class ReachCount(models.Model):
    ad_id = models.CharField(max_length=10)
    user_id = models.CharField(max_length=50)
    reg_date = models.DateTimeField(auto_now_add=True)
    class Meta:
        ordering=['ad_id','user_id']

我附上我的样本数据。你知道吗

广告id用户id

1艾扎
2艾扎
3艾扎
4艾扎
1安德烈
2安德烈
3安德烈
4安德烈
1安德烈
1安德烈
1博尼塔
2博尼塔
3博尼塔
2博尼塔
2比12
3比12
4爱德华
5爱德华
1加仑
3加仑
4加仑
7疾驰
3加仑10
6加仑10
8加仑99
2 jihoonpark1
5 jihoonpark1
6 jihoonpark1
5 rhewster公司
6个rhewster
7流变仪
2总计
4总计
9总计
10艾扎
10安德烈


Tags: 代码fromtestidbymodelscountgroup