相关疑难解决方法(0)

如何在Django ORM中执行GROUP BY ... COUNT或SUM?

序幕:

这是SO中经常出现的问题:

我已经在SO文档中编写了一个示例,但由于文档将于2017年8月8日关闭,我将遵循这个广泛上升和讨论的元答案的建议,并将我的示例转换为自我回答的帖子.

当然,我也很乐意看到任何不同的方法!


题:

假设模型:

class Books(models.Model):
    title  = models.CharField()
    author = models.CharField()
    price = models.FloatField()
Run Code Online (Sandbox Code Playgroud)

如何使用Django ORM在该模型上执行以下查询:

python django group-by django-orm

6
推荐指数
1
解决办法
6705
查看次数

Django查询模型 - GROUP BY,MIN,MAX

我将查询转移到django时遇到问题.在sqlite3中,它看起来像这样:

SELECT A, MIN(B), MAX(B) from table GROUP BY A
Run Code Online (Sandbox Code Playgroud)

这将从A输出唯一值,其中包含一系列来自B的值.有关如何处理此问题的任何提示?在django甚至可能吗?

sqlite django django-models

4
推荐指数
1
解决办法
1505
查看次数

如何将此SQL语句转换为Django QuerySet?

请注意:这个问题是我几天前提出的这个问题的后续问题.它不是重复的.我正在尝试在Django中建模的SQL查询和我加载的虚拟数据之间存在轻微但显着的差异.

我正在编写一个Python/Django应用程序来进行一些库存分析.

我有两个非常简单的模型,如下所示:

class Stock(models.Model):
    symbol = models.CharField(db_index=True, max_length=5, null=False, editable=False, unique=True)

class StockHistory(models.Model):
    stock = models.ForeignKey(Stock, related_name='StockHistory_stock', editable=False)
    trading_date = models.DateField(db_index=True, null=False, editable=False)
    close = models.DecimalField(max_digits=12, db_index=True, decimal_places=5, null=False, editable=False)

    class Meta:
        unique_together = ('stock', 'trading_date')
Run Code Online (Sandbox Code Playgroud)

这是我填充的虚拟数据:

import datetime
a = Stock.objects.create(symbol='A')
b = Stock.objects.create(symbol='B')
c = Stock.objects.create(symbol='C')
d = Stock.objects.create(symbol='D')

StockHistory.objects.create(trading_date=datetime.date(2018,1,1), close=200, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2018,1,2), close=150, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2018,1,3), close=120, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2018,4,28), close=105, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2018,5,2), close=105, stock=a)
StockHistory.objects.create(trading_date=datetime.date(2018,5,3), close=105, stock=a)

StockHistory.objects.create(trading_date=datetime.date(2017,5,2), close=400, stock=b)
StockHistory.objects.create(trading_date=datetime.date(2017,11,11), close=200, stock=b) …
Run Code Online (Sandbox Code Playgroud)

python mysql django

4
推荐指数
1
解决办法
420
查看次数

标签 统计

django ×3

python ×2

django-models ×1

django-orm ×1

group-by ×1

mysql ×1

sqlite ×1