Django ORM 分组

问题描述 投票:0回答:1
row_1(PK) row_2 row_3
1 一个
2 两个
3

我的数据库表中的数据类似于上表。

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”列分组。

django orm
1个回答
0
投票

你需要使用

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

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

但是这里看起来您实际上是在创建一个 aggregate,因为由于过滤只选择了

row2
的一种值,因此不需要按该值进行分组。在这种情况下,您可以使用
.aggregate(…)
 [Django-doc]

table_.objects.filter(row2='row').aggregate(val=GroupConcat('row3', ''))
© www.soinside.com 2019 - 2024. All rights reserved.