Heim >Datenbank >MySQL-Tutorial >Wie kann ich die neuesten Elemente pro Kategorie in SQL effizient auswählen?
Optimieren Sie SQL-Abfragen, um die neuesten Elemente in jeder Kategorie effizient auszuwählen
Die Herausforderung, die neuesten Projekte in jeder Kategorie in der Datenbank anzuzeigen, erfordert eine effiziente SQL-Abfrage. Während das Durchlaufen von Kategorie für Kategorie und das Abfragen der neuesten Elemente ein unkomplizierter Ansatz ist, ist es besser, die Abfrage durch die Reduzierung von Datenbankaufrufen zu optimieren.
Max-N-Fragen pro Gruppe
Die Aufgabe, die neuesten n Datensätze in einer Kategoriegruppe zu identifizieren, wird als Max-n-per-Group-Problem bezeichnet, ein häufiges SQL-Abfrageproblem.
Externe Verbindungslösung
Mithilfe von Outer Joins können wir das gewünschte Ergebnis erzielen:
<code class="language-sql">SELECT i1.* FROM item i1 LEFT OUTER JOIN item i2 ON (i1.category_id = i2.category_id AND i1.item_id < i2.item_id) GROUP BY i1.item_id HAVING COUNT(*) < 4;</code>
Beschreibung
Diese Abfrage führt eine äußere Verknüpfung zwischen jedem Element (i1) und dem neueren Element (i2) durch und berücksichtigt dabei nur Elemente derselben Kategorie. Die COUNT(*)-Klausel bestimmt die Anzahl neuerer Elemente für jedes i1. Projekte mit weniger als vier neueren Projekten werden zu qualifizierten Kandidaten für unsere Auswahl.
Vorteile
Diese Lösung ist flexibel und anpassungsfähig:
Alternativen
Eine weitere MySQL-spezifische Lösung mit Benutzervariablen:
<code class="language-sql">SELECT * FROM ( SELECT i.*, @r := IF(@g = category_id, @r+1, 1) AS rownum, @g := category_id FROM (SELECT @g:=null, @r:=0) AS _init CROSS JOIN item i ORDER BY i.category_id, i.date_listed ) AS t WHERE t.rownum <= 4;</code>
SQL-Fensterfunktionen
MySQL 8.0.3 führte Fensterfunktionen ein und ermöglichte eine weitere effiziente Lösung:
<code class="language-sql">WITH numbered_item AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY item_id) AS rownum FROM item ) SELECT * FROM numbered_item WHERE rownum <= 4;</code>
Fazit
Durch die Auswahl der geeigneten Abfragemethode basierend auf Ihrer spezifischen MySQL-Version und Datenbankstruktur können Sie die Auswahl der neuesten Elemente in jeder Kategorie effektiv optimieren.
Das obige ist der detaillierte Inhalt vonWie kann ich die neuesten Elemente pro Kategorie in SQL effizient auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!