django - Django 在 GROUP BY 子句中添加了一个额外的字段
问题描述
这是一个查询:
speed_by_computer = ChartPoint.objects.filter(
date__gte=start,
date__lt=end,
).values('computer_id') \
.annotate(max_speed=Max('speed'))
这是此查询生成的 SQL 查询:
SELECT "computer_id", MAX("speed") AS "max_speed"
FROM "api_chartpoint"
WHERE (
"date" >= 2018-05-17 08:00:00+00:00 AND
"date" < 2018-05-17 09:00:00+00:00
)
GROUP BY "computer_id", "date"
ORDER BY "date" DESC
date
请注意,GROUP BY
子句中有意外。为什么会在这里?这是我的预期:
SELECT "computer_id", MAX("speed") AS "max_speed"
FROM "api_chartpoint"
WHERE (
"date" >= 2018-05-17 08:00:00+00:00 AND
"date" < 2018-05-17 09:00:00+00:00
)
GROUP BY "computer_id"
解决方案
问题出在默认排序中。它被指定在Meta
:
class ChartPoint(models.Model)
...
class Meta:
ordering = ['-date']
删除排序并且date
不会被添加到GROUP BY
:
speed_by_computer = ChartPoint.objects.filter(
date__gte=start,
date__lt=end,
).values('computer_id') \
.annotate(hs_avg=Max('speed'))
.order_by()
推荐阅读
- python - 对数刻度机智 matplotlib 中的 x-ticks 问题
- r - 我想为每个站点绘制多个直方图
- javascript - 子编译错误、模块错误、解析错误。html-loader 和 srcset 属性
- ruby - 将字符串货币转换为使用 ruby 浮动
- latex - 如何将文本放在表格(标题)的标题下?
- c# - 当 iOS 上涉及本地数据库时,Xamarin.Forms 重新加载到可观察的集合故障
- nlp - 预训练的 BERT 模型学习错误的方式
- facebook-graph-api - 来自 FB API 的实时更新
- c# - 使用返回值和 async/await 并行执行
- reactjs - 根据其他组件的状态更改显示