Heim >Datenbank >MySQL-Tutorial >Wie wähle ich die erste Zeile jeder Gruppe in einer PostgreSQL-GROUP-BY-Abfrage aus?

Wie wähle ich die erste Zeile jeder Gruppe in einer PostgreSQL-GROUP-BY-Abfrage aus?

DDD
DDDOriginal
2025-01-25 20:21:10973Durchsuche

How to Select the First Row of Each Group in a PostgreSQL GROUP BY Query?

Wählen Sie die erste Zeile in der PostgreSQL-Gruppe „GROUP BY“ aus

In PostgreSQL ist die Auswahl der ersten Zeile jeder Gruppe in einer GROUP BY-Operation eine häufige Anforderung. Hierfür können wir die leistungsstarke DISTINCT ON-Klausel verwenden.

<code class="language-sql">SELECT DISTINCT ON (customer) id, customer, total
FROM purchases
ORDER BY customer, total DESC</code>
Mit der

DISTINCT ON-Klausel können wir definieren, welche Ausdrücke als Duplikate betrachtet werden. In diesem Beispiel haben wir die Spalte customer angegeben, was bedeutet, dass nur Zeilen mit demselben customer-Wert als Duplikate betrachtet werden.

Die

ORDER BY-Klausel definiert die Reihenfolge, in der Zeilen verarbeitet werden. Die erste Zeile in jeder customer-Gruppe ist die Zeile mit dem höchsten Gesamtwert. Wenn es mehrere Zeilen mit demselben maximalen Gesamtwert gibt, ist die Reihenfolge, in der die id-Spalten definiert werden, ausschlaggebend.

Wichtige Punkte

  • DISTINCT ON ist eine Erweiterung von PostgreSQL, mit der wir angeben können, welche Ausdrücke Duplikate ermitteln.
  • Der
  • DISTINCT ON-Ausdruck muss mit dem führenden Ausdruck in der ORDER BY-Klausel übereinstimmen.
  • Die
  • ORDER BY-Klausel kann verwendet werden, um Zeilen innerhalb jeder Gruppe zu priorisieren.
  • Sie können Ausdrücke in die SELECT-Liste aufnehmen, die nicht in einer DISTINCT ON- oder ORDER BY-Klausel enthalten sind.
  • Der von einer Abfrage verwendete Index kann die Leistung erheblich beeinträchtigen. Ein mehrspaltiger Index, der die Spalten customer, total und id in derselben Reihenfolge wie die Abfrage umfasst, bietet die beste Leistung.

Zusätzliche Hinweise

Für Daten mit customer hoher Spaltenkardinalität (eine kleine Anzahl von Zeilen pro Kunde) ist die DISTINCT ON-Methode sehr effizient. Für customer-Daten mit geringer Spaltenkardinalität (große Anzahl von Zeilen pro Kunde) können jedoch andere Abfragetechniken effizienter sein.

Das obige ist der detaillierte Inhalt vonWie wähle ich die erste Zeile jeder Gruppe in einer PostgreSQL-GROUP-BY-Abfrage aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn