sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur använder man subquery i django?

Det här kanske inte är exakt vad du letar efter, men det kan komma dig närmare. Ta en titt på Djangos anteckning .

Här är ett exempel på något som kan hjälpa:

  from django.db.models import Max
  Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))

Detta kommer att ge dig en lista över dina kundmodeller som var och en kommer att ha ett nytt attribut som kallas "senaste_köp" och kommer att innehålla det datum då de gjorde sitt senaste köp. Den skapade sql ser ut så här:

SELECT "demo_customer"."id", 
       "demo_customer"."user_id", 
       MAX("demo_purchase"."date") AS "most_recent_purchase"
FROM "demo_customer"
LEFT OUTER JOIN "demo_purchase" ON ("demo_customer"."id" = "demo_purchase"."customer_id")
GROUP BY "demo_customer"."id",
         "demo_customer"."user_id"

Ett annat alternativ skulle vara att lägga till en egenskap till din kundmodell som skulle se ut ungefär så här:

  @property
  def latest_purchase(self):
    return self.purchase_set.order_by('-date')[0]

Du skulle uppenbarligen behöva hantera fallet där det inte finns några köp i den här fastigheten, och detta skulle potentiellt inte fungera särskilt bra (eftersom du skulle köra en fråga för varje kund för att få sitt senaste köp).

Jag har använt båda dessa tekniker tidigare och de har båda fungerat bra i olika situationer. Jag hoppas det här hjälper. Lycka till!



  1. postgreSQL - in vs any

  2. Vad är den största skillnaden mellan Varchar2 och char

  3. MySQL LIMIT i en korrelerad delfråga

  4. FORALL-uttalande med VALUES-OF Bound-klausul i Oracle Database