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”列分组。
.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', ''))