[英]Nested query in Django ORM
我嘗試使用不同或注釋刪除重復的行,然后測量某些東西的計數。(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 的重復次數
我的modele.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()
試試這個查詢:
A.objects.filter(
created_at__range=[2021-07-12, 2021-07-14],
).annotate(cp_count=Count('cp_id')).values('cp_count', 'user_id', 'product_id', 'created_at').order_by('created_at')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.