【发布时间】:2015-02-05 22:15:33
【问题描述】:
假设我有类似这些模型的东西:
class Product(models.Model):
name = models.CharField(max_length=50)
class Sale(models.Model):
product = models.ForeignKey(Product)
sale_date = models.DateField()
我想了解每种产品的最新销售情况。最新表示最新的销售日期。此外,在同一个查询中,我想获取每种产品的销售数量。
在 SQL 术语中,我需要按 product_id 分组,以计算每个产品的销售数量(即每个组的长度)。并且也许还可以按日期订购(在每个组中也是如此)以获得最新的产品销售。
使用 django ORM,我意识到我需要以某种方式使用 annotate() 并且可能与 values() 结合使用。但我还没想好怎么做。
假设我有这个 products 表:
| id | name |
===================
| 1 | Book |
| 2 | Telephone |
还有这个sales表:
| id | product_id | sale_date |
=================================
| 1 | 1 | 05-02-2015 |
| 2 | 2 | 04-02-2015 |
| 3 | 2 | 03-02-2015 |
| 4 | 1 | 06-02-2015 |
| 5 | 1 | 01-02-2015 |
我想得到如下输出:
| product_id | name | sale_date | num_sales |
====================================================
| 1 | Book | 06-02-2015 | 3 |
| 2 | Telephone | 04-02-2015 | 2 |
因为 06-02-2015 是 product_id=1(图书)的最晚销售日期,而 04-02-2015 是 product_id=2(电话)的最晚销售日期。
【问题讨论】: