sql >> Database >  >> RDS >> Mysql

Selecteer n rijen per groep in mysql

Je hebt veel oplossingen en een daarvan is het gebruik van left join en je kunt er naar kijken

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

De logica is om een ​​left join te doen met dezelfde tabel waar het type hetzelfde is en de prijs lager is dan de andere en tenslotte een group by te doen de varity en gebruik vervolgens de count() waarbij u het aantal gewenste records per groep moet tonen. Merk op dat je in mysql de vrijheid hebt om een ​​group by-clausule te hebben zoals in de bovenstaande query op een willekeurige manier die in andere RDBMS kan mislukken.

Nu je wat verwarring hebt over de alias , in het bovenstaande voorbeeld is de tabelnaam test en binnen de zoekopdracht wordt een pseudo-naam gegeven als t1 . Ook als je een self-join doet, is het belangrijk dat je unieke aliasnamen geeft voor dezelfde tabel. In het bovenstaande voorbeeld is dezelfde tabel samengevoegd met zichzelf, dus we moeten ervoor zorgen dat we een aliasnaam voor de tabellen geven.




  1. Heeft het zin om MySQL LIMIT 1 te gebruiken bij het opvragen van een geïndexeerd/uniek veld?

  2. Gemakkelijke manier om een ​​slug-naamkolom te genereren uit de naamkolom?

  3. MySQL-fout:kan een externe sleutelbeperking niet worden toegevoegd?

  4. VOEG WAARDEN IN WAAR NIET BESTAAT