GROUP BY
ve HAVING
’yi Django’nun QuerySet.annotate
ve QuerySet.aggregate
’una nasıl çevireceğimi pek bilmiyorum. Bu SQL sorgusunu ORM'ye çevirmeye çalışıyorumDjango'nun ORM'deki bu GROUP BY sorgusunu açıklama notu ve toplu olarak nasıl yaparsınız
SELECT EXTRACT(year FROM pub_date) as year, EXTRACT(month from pub_date) as month, COUNT(*) as article_count FROM articles_article GROUP BY year,month;
bunu verir:
[(2008.0, 10.0, 1L), # year, month, number of articles
(2009.0, 2.0, 1L),
(2009.0, 7.0, 1L),
(2008.0, 5.0, 3L),
(2008.0, 9.0, 1L),
(2008.0, 7.0, 1L),
(2009.0, 5.0, 1L),
(2008.0, 8.0, 1L),
(2009.0, 12.0, 2L),
(2009.0, 3.0, 1L),
(2007.0, 12.0, 1L),
(2008.0, 6.0, 1L),
(2009.0, 4.0, 2L),
(2008.0, 3.0, 1L)]
Benim Django modelim:
class Article(models.Model):
title = models.CharField(max_length=150, verbose_name=_("title"))
# ... more
pub_date = models.DateTimeField(verbose_name=_('publishing date'))
Bu proje birkaç farklı şekilde çalışmalıdır. DB sistemleri, bu yüzden mümkün olduğunca saf SQL'den uzak durmaya çalışıyorum.
Güzel hile, teşekkürler: Sen tarihleri ile bir özü yapabilirsiniz
–Gönderdiğiniz "extra" örnek harika çalışıyor. Keşke bu cevabı daha fazla kazanabilseydim! –