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.