Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на .aggregate() върху стойност, въведена с помощта на .extra(select={...}) в Django заявка?

Можете да използвате персонализирана агрегатна функция, за да произведете вашата заявка:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да направите изместването на ограничението динамично, като използвате само (My)SQL

  2. Кое е най-доброто поле за съхранение на рождения ден?

  3. MySQL сортиране по изчисление

  4. MySQL:Разделете списъка, разделен със запетая, на няколко реда

  5. Обединете 2 масива и сумирайте стойностите (цифрови клавиши)