簡體   English   中英

Django ORM 中的嵌套查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM