sql >> データベース >  >> RDS >> Mysql

Djangoクエリで.extra(select ={...})を使用して導入された値に.aggregate()を使用しますか?

    カスタム集計関数を使用してクエリを生成できます:

    WEEK_FUNC = 'STRFTIME("%%%%W", %s)' # use 'WEEK(%s)' for mysql
    
    class WeekCountAggregate(models.sql.aggregates.Aggregate):
        is_ordinal = True
        sql_function = 'WEEK' # unused
        sql_template = "COUNT(%s)" % (WEEK_FUNC.replace('%%', '%%%%') % '%(field)s')
    
    class WeekCount(models.aggregates.Aggregate):
        name = 'Week'
        def add_to_query(self, query, alias, col, source, is_summary):
            query.aggregates[alias] = WeekCountAggregate(col, source=source, 
                is_summary=is_summary, **self.extra)
    
    
    >>> game_objects.extra(select={'week': WEEK_FUNC % '"games_game"."date"'}).values('week').annotate(count=WeekCount('pk'))
    

    ただし、このAPIは文書化されておらず、すでに生のSQLが必要なため、生のクエリ



    1. SQL Serverクエリの用語集—DBAのスティックシフト

    2. MySQLクエリのテーブルと列を引用符で囲む必要がありますか?

    3. SQLServerでフィールド値を文字列に連結します

    4. RAC OneNodeアーキテクチャでのActiveDataGuardフィジカルスタンバイの設定–パート1