Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie n Zeilen pro Gruppe in mysql aus

Sie haben viele Lösungen und eine davon ist die Verwendung von left join und Sie können darüber nachsehen

select t1.* from test t1
left join test t2
on t1.type = t2.type and t1.price > t2.price
group by t1.variety
having count(*) <=1
order by t1.type,t1.price

Die Logik besteht darin, eine Linksverknüpfung mit derselben Tabelle durchzuführen, bei der der Typ derselbe und der Preis niedriger als der andere ist, und schließlich eine group by durchzuführen die Sorte und verwenden Sie dann count(), wobei Sie die Anzahl der gewünschten Datensätze pro Gruppe anzeigen müssen. Beachten Sie, dass Sie in mysql die Freiheit haben, eine group by-Klausel wie in der obigen Abfrage auf willkürliche Weise zu verwenden, was in anderen RDBMS fehlschlagen kann.

Nun, da Sie einige Verwirrung über den alias haben , im obigen Beispiel lautet der Tabellenname test und innerhalb der Abfrage wird ein Pseudoname als t1 angegeben . Auch wenn Sie sich selbst beitreten, ist es wichtig, dass Sie eindeutige Aliasnamen für dieselbe Tabelle vergeben. Im obigen Beispiel wird dieselbe Tabelle mit sich selbst verknüpft, daher müssen wir sicherstellen, dass wir den Tabellen einen Aliasnamen geben.