Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używanie .aggregate() na wartości wprowadzonej za pomocą .extra(select={...}) w zapytaniu Django?

Do utworzenia zapytania możesz użyć niestandardowej funkcji agregującej:

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'))

Ale ponieważ ten interfejs API jest nieudokumentowany i wymaga już bitów surowego SQL, lepiej byłoby użyć surowe zapytanie .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje sposób, aby zainstalować tylko klienta mysql (Linux)?

  2. SQLSTATE[HY000]:Błąd ogólny:1298 Nieznana lub niepoprawna strefa czasowa:okna „UTC”

  3. mysql SELECT LIKE musi dopasowywać całe słowa tylko do zmiennej

  4. łączenie się z kontenerem docker-compose mysql odmawia dostępu, ale docker z tym samym obrazem nie

  5. jak zignorować backticki w codeigniter podczas korzystania z aktywnych rekordów? muszę zamawiać według przypadków