You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django ORM分组异常:期望按row_2分组却按主键分组求助

问题解决:Django ORM按指定字段分组实现GROUP_CONCAT

数据库表结构及数据

row_1(PK)row_2row_3
1rowone
2rowtwo
3rowthree

目标原生MySQL查询

SELECT
   GROUP_CONCAT(row_3)
FROM table_
WHERE row_2 = 'row'
GROUP BY row_2;

原ORM代码问题

原代码先执行annotate再调用values,Django会默认按模型主键(row_1)分组,不符合需求:

table_.objects.filter(
    row_2='row'
).annotate(
    val=GroupConcat('row_3', '')
).values('val')

修正后的ORM代码

调整调用顺序,先通过values('row_2')指定分组字段,再执行聚合操作,最后提取结果:

table_.objects.filter(
    row_2='row'
).values('row_2').annotate(
    val=GroupConcat('row_3', '')
).values('val')

逻辑说明

  • values('row_2')明确告诉Django要按row_2字段分组,覆盖了默认的主键分组行为。
  • annotate基于指定分组完成GROUP_CONCAT聚合计算。
  • 最后values('val')仅提取聚合后的结果,与目标原生SQL逻辑完全匹配。

内容的提问来源于stack exchange,提问作者sarath kumar sontam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:55:55