ホームページ >データベース >mysql チュートリアル >Django で MySQL の GROUP_CONCAT 機能をレプリケートするにはどうすればよいですか?
Django で GROUP_CONCAT 機能を取得する
MySQL の GROUP_CONCAT の概念を拡張して、Django は同様の結果を達成するための代替アプローチを提供します。 Django では、カスタム集計関数を使用して GROUP_CONCAT をエミュレートできます。
Concat 集計関数の作成:
from django.db.models import Aggregate class Concat(Aggregate): function = 'GROUP_CONCAT' template = '%(function)s(%(distinct)s%(expressions)s)' def __init__(self, expression, distinct=False, **extra): super(Concat, self).__init__( expression, distinct='DISTINCT ' if distinct else '', output_field=CharField(), **extra)
このカスタム集計関数を使用すると、 Django クエリセット内で GROUP_CONCAT 操作を実行できるようになりました。
使用例:
次のデータを含む Fruits テーブルを考えます:
id | type | name |
---|---|---|
0 | apple | fuji |
1 | apple | mac |
2 | orange | navel |
取得するにはさまざまな果物の種類の数とその名前のカンマ区切りリスト:
query_set = Fruits.objects.values('type').annotate(count=Count('type'), name = Concat('name')).order_by('-count')
このクエリセットは次の結果を返します:
type | count | name |
---|---|---|
apple | 2 | fuji,mac |
orange | 1 | navel |
以上がDjango で MySQL の GROUP_CONCAT 機能をレプリケートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。