row_1(PK) row_2 row_3
1 row one
2 row two
3 row three

我的数据库表中的数据如上表所示.

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

我的Django查询实现上面的MySQL查询

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

在将上述ORM转换为原始MySQL查询时,它是按主键(ROW_1)分组的.我想按‘ROW_2’列分组.

推荐答案

你需要用.order_by(…) [Django-doc],是的,我知道这听起来很奇怪,所以:

table_.objects.filter(row2='row').values('row2').annotate(
    val=GroupConcat('row3', '')
).order_by('row2')

但这里看起来您实际上是在做一个aggregate,因为由于筛选,只 Select 了row2的一种值,所以没有必要按该值分组.在这种情况下,您可以使用.aggregate(…) [Django-doc]:

table_.objects.filter(row2='row').aggregate(val=GroupConcat('row3', ''))

Django相关问答推荐

在Django的反向函数中添加动态URL

Django Form初始值不在呈现上起作用

Django和静态文件

如何使用来自另一个字段的信息创建字段

Django ORM __in 但不是精确的,包含不区分大小写的?

是否可以在 Django 中重命名应用程序的组名?

相同的字符串不同的翻译

是否有 django 模板过滤器来显示百分比?

django 管理员登录突然要求 csrf 令牌

如何在django中生成临时文件然后销毁

是否可以将 FastAPI 与 Django 一起使用?

OrderingFilter 没有属性filter_queryset

如何使用基于类的视图处理表单(通过 get 或 post)?

Python 社区里的小马是怎么回事?

UnicodeEncodeError:ascii编解码器无法编码字符

Django查询否定

Django:AppRegistryNotReady()

它是如何工作的,Django INSTALLED_APPS 的命名约定?

Django Debug Toolbar:了解时间面板( time panel)

Django REST 框架中的每个字段权限