PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wyrażenie zapytania Django dla pól obliczanych, które wymagają warunków i rzutowania

Użyj wyrażeń warunkowych :

from django.db.models import Case, F, Sum, When

Stats.objects.values('product').annotate(
    tot_impressions=Sum('impressions'), 
    tot_clicks=Sum('clicks')
).annotate(
    ctr=Case(When(tot_impressions=0, then=None),  # or other value, e.g. then=0
             # 1.0*... is to get float in SQL
             default=1.0*F('tot_clicks')/F('tot_impressions'),
             output_field=models.FloatField())
).order_by('ctr')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Intel SSD, teraz poza sh..err, zawstydzona lista

  2. Jak uzyskać sumowanie z liczbą większą niż określona kwota

  3. Jak połączyć (Py)Spark z bazą danych Postgres za pomocą JDBC?

  4. Radzenie sobie z ciągiem zawiera bajt null wysłany od użytkowników

  5. Django ORM błędnie odczytuje sekwencje PostgreSQL?