............模型............
class Product(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=140)
description = tinymce_models.HTMLField()
class Purchase(models.Model):
user = models.ForeignKey(User, blank=True, null=True)
product = models.ForeignKey(Product)
sale_date = models.DateTimeField(auto_now_add=True)
price = models.DecimalField(max_digits=6, decimal_places=2)
我希望获得一个输出,其中显示过去一个月和过去一周产品的购买价格总和,但希望为多个产品执行此操作。
输出看起来像我可以在我的模板中循环...
product1 name-- product1 description - product1每周销售总和 - product1月销售额之和
产品2名称 - 产品2描述 - 产品2每周销售总和 - 产品2月销售额之和
我应该使用原始sql吗?那个查询会是什么样的?我应该尝试使用sqlalchemy,还是可以在Django ORM中使用?
答案 0 :(得分:0)
我建议你在sql语句中执行它,因为sql更好地操作数据,求和它...你的代码将设法从RDBMS检索数据并显示它...
我不知道你的RDBMS是什么,但我在sql server中给你一个例子,其他RDBMS中的语法大约是95%。 您的查询应如下所示:
SELECT
prod.product_id
,prod.description
,ISNULL(weekSales.priceSum,0) as weekSales
,ISNULL(monthSales.priceSum,0) as monthSales
FROM
Product prod
left join (
SELECT
product_id
,sum(price) as priceSum
FROM Purchase
WHERE DATEPART(wk,sale_date) = DATEPART(wk,GETDATE())
GROUP BY product_id) weekSales
on prod.product_id = weekSales.product_id
left join (
SELECT
product_id
,sum(price) as priceSum
FROM Purchase
WHERE
month(sale_date) = MONTH(GETDATE())
AND year(sale_date) = year(GETDATE())
GROUP BY product_id) monthSales
on prod.product_id = monthSales.product_id
Here you can see a demo of this query with SQLFiddle
在sql server中,
您应该能够在所有RDBMS中找到类似的功能。
如果您在sql中需要一些帮助,请在上面注释并指定您的RDBMS;)
希望它有所帮助。