Django ORM groupby
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')
But here it looks like you are actually making an aggregate, since only one sort of value for row2
is picked due to the filtering, so grouping by that value is not necessary. You can use .aggregate(…)
[Django-doc] in that case:
table_.objects.filter(row2='row').aggregate(val=GroupConcat('row3', ''))