【发布时间】:2021-09-25 03:21:07
【问题描述】:
我正在尝试删除具有不同或注释的重复行,然后测量某些东西的计数。(mysql:8,django:2.2)
sql
select t1.cp_id, count(*) from (
SELECT user_id, product_id, cp_id, count(*) as cnt FROM A
where created_at between '2021-07-12' and '2021-07-13'
group by user_id, product_id, cp_id
) as t1
group by t1.cp_id
我的查询集
A.objects.filter(
created_at__gte='2021-07-12',
created_at__lt='2021-07-13'
).values('cp_id', 'user_id', 'product_id').annotate(cnt=Count('cp_id')).values('cp_id').annotate(count=Count('cp_id'))
这个查询集 sql
SELECT A.cp_id, COUNT(cp_id`) AS count FROM A
WHERE (
created_at >= 2021-07-11 19:30:00 AND
created_at < 2021-07-12 19:30:00 AND
)
GROUP BY cp_id, created_at
ORDER BY created_at ASC
我很困惑为什么 Django 会忽略我的命令顺序并在原始表(而不是删除重复数据的表)上执行最后一个查询命令
感谢您有解决方案或想法删除具有相同 'cp_id'、'user_id'、'product_id' 的行(不是从数据库中),然后计算每个 cp_id 的重复次数
我的模型.py
class A(models.Model):
product = models.ForeignKey(Product,on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
cp = models.ForeignKey(CP, on_delete=models.CASCADE)
created_at = models.DateTimeField()
【问题讨论】:
-
只需要确认一件事你为什么要使用两次计数的注释来为cp_id?
-
@OpticPython 因为我想确保在我的计算中我的产品只计算一次('cp_id'、'user_id'、'product_id'、'created_at')然后我发现每天销售多少 cp 产品。每个 ('cp_id', 'user_id', 'product_id', 'created_at') 表中可能有几行
-
你厌倦了下面的查询吗?
标签: python mysql django database orm