ホームページ >データベース >mysql チュートリアル >Django で MySQL の GROUP_CONCAT 機能をレプリケートするにはどうすればよいですか?

Django で MySQL の GROUP_CONCAT 機能をレプリケートするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-19 00:04:02525ブラウズ

How to Replicate MySQL's GROUP_CONCAT Functionality in Django?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。