Abfrage als GROUP BY in Django
-
Erstellen Sie eine
GROUP BY
-Abfrage in Django -
Verwenden Sie mehrere Aggregationen mit der
GROUP BY
-Abfrage -
GROUP BY
Datensätze mit mehreren Spalten - Datensätze aus jeder Gruppe filtern
Die meisten von Ihnen sind mit SQL vertraut und wissen, wie man SQL-Abfragen mit der Klausel GROUP BY
schreibt, um Daten in Gruppen abzurufen. Mit der Klausel GROUP BY
können wir eine Gruppe von Datensätzen basierend auf den einspaltigen oder mehrspaltigen Werten erstellen und eine Aggregatfunktion ausführen.
In diesem Artikel gehen wir davon aus, dass wir an der Datenbank Bike
arbeiten, die die Bike_id
, Bike_name
, Bike_brand
, Bike_color
, Bike_bought_date
, Is_bike_premium
, Bike_price
usw. enthält .
Wir werden lernen, verschiedene Operationen mit der GROUP BY
-Klausel in der obigen Bike
-Datenbank durchzuführen. Außerdem werden wir zuerst SQL-Abfragen mit der GROUP BY
-Klausel schreiben und sie in Python konvertieren, damit die Leser sie leicht verstehen und schnell lernen können, Abfragen in Django zu schreiben.
Erstellen Sie eine GROUP BY
-Abfrage in Django
Angenommen, wir möchten die Anzahl der Fahrräder nach ihrer Farbe zählen. Einfach ausgedrückt, wir möchten eine Gruppe von Fahrrädern nach ihren Farben erstellen, und dafür haben wir die folgende SQL-Abfrage geschrieben.
SELECT
Bike_color,
COUNT(Bike_id) AS Total_bikes
FROM
Bike
GROUP BY
Bike_color
Als Ausgabe der obigen SQL-Abfrage erhalten wir 2 Spalten. Einer ist Bike_color
und ein anderer ist Total_Bikes
, der die Anzahl der Fahrräder einer bestimmten Farbe darstellt.
Jetzt konvertieren wir die obige SQL-Abfrage in Python-Code, um das gleiche Ergebnis zu erhalten.
from django.db.models import Count
Bike.objects.values("Bike_color").annotate(Total_bikes=Count("Bike_id"))
Ausgang:
values()
– Ersetzt dieGROUP BY
-Klausel der SQL-Abfrage. Welche Spalte auch immer wir mit derGROUP BY
-Klausel in der SQL-Abfrage verwenden, die wir als Argumente dervalues()
-Methode verwenden müssen.annotate()
– Die Methodeannotate()
nimmt die Aggregatfunktion als Argument, das auf jede Gruppe angewendet wird.
Auf diese Weise können wir eine Gruppe von Fahrrädern nach ihrer Farbe erstellen und die Anzahl der Fahrräder derselben Farbe mit der Python-Abfrage zählen.
Wenn Benutzer die Funktion annotate()
vor values()
aufrufen, wird die Aggregatfunktion nicht auf die Gruppenzeile, sondern auf den gesamten Datensatz angewendet. Stellen Sie also die Reihenfolge der Methoden sicher, die Sie beim Schreiben von Abfragen verwenden.
Verwenden Sie mehrere Aggregationen mit der GROUP BY
-Abfrage
Hier werden wir eine Gruppe von Fahrrädern nach ihrer Farbe erstellen. Danach verwenden wir die Aggregationsfunktion Count()
, um Fahrräder jeder Farbe zu zählen, und die Aggregationsfunktion Min()
, um aus jeder Gruppe ein Fahrrad mit minimalen Kosten zu erhalten.
SELECT
Bike_color,
COUNT(Bike_id) AS Total_bikes,
MIN(Bike_price) As cheap_bike
FROM
Bike
GROUP BY
Bike_color
Unten haben wir die obige SQL-Abfrage in Python-Code konvertiert.
from django.db.models import Count
from django.db.models import Min
Bike.objects.values("Bike_color").annotate(
Total_bikes=Count("Bike_id"), cheap_bike=Min("Bike_price")
)
Ausgang:
Auf diese Weise haben wir die multiplen Aggregatfunktionen Count()
und Min()
mit der group by
-Abfrage in Python verwendet.
GROUP BY
Datensätze mit mehreren Spalten
In der folgenden SQL-Abfrage haben wir die Felder Bike_color
und Is_bike_premium
mit der GROUP BY
-Klausel verwendet. Die Abfrage gruppiert die Datensätze nach ihrer Farbe und ob sie sich in einer Premium-Kategorie befinden.
SELECT
Bike_color,
Is_bike_premium,
COUNT(Bike_id) AS Total_bikes,
FROM
Bike
GROUP BY
Bike_color,
Is_bike_premium
Wir müssen mehrere Felder innerhalb der values()
-Methode hinzufügen, um die obige SQL-Abfrage in Python-Code umzuwandeln.
from django.db.models import Count
Bike.objects.values("Bike_color", "Is_bike_premium").annotate(
Total_bikes=Count("Bike_id")
)
Ausgang:
Datensätze aus jeder Gruppe filtern
In diesem Abschnitt gruppieren wir alle Datensätze der Tabelle Bike
nach ihrer Farbe und filtern alle Nicht-Premium-Bikes aus jeder Gruppe heraus. Einfach gesagt, wir werden eine Gruppe von Nicht-Premium-Bikes nach ihrer Farbe zusammenstellen.
Wir haben die WHERE
-Klausel in der folgenden SQL-Abfrage verwendet, um die Fahrräder zu filtern.
SELECT
Bike_color,
COUNT(Bike_id) AS Total_bikes
FROM
Bike
WHERE
Is_bike_premium = False
GROUP BY
Bike_color
Um die obige SQL-Abfrage in einen Python-Code umzuwandeln, haben wir die filter()
-Methode von Python verwendet und die Filterbedingung als Argument übergeben.
from django.db.models import Count
Bike.objects.values("Bike_color").filter(Is_bike_premium=False).annotate(
Total_bikes=Count("Bike_id")
)
Ausgang:
In diesem Artikel haben wir gelernt, wie man GROUP BY
-Abfragen in Django erstellt. Außerdem haben wir die verschiedenen Anwendungsfälle der Gruppieren nach
-Abfragen gesehen.
Außerdem können Benutzer die group by
-Abfragen mit der orderBy()
-Methode verwenden, um die Datensätze jeder Gruppe zu sortieren.