sql >> Databasteknik >  >> RDS >> Mysql

Välj n rader per grupp i mysql

Du har många lösningar och en av dem är att använda left join och du kan kontrollera det

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

Logiken är att göra en vänsterkoppling med samma tabell där typen är densamma och priset är lägre än den andra och slutligen göra en group by varianten och använd sedan count() med att visa antalet poster du vill ha per grupp. Observera att i mysql har du en frihet att ha en grupp för klausul som i ovanstående fråga på ett godtyckligt sätt som kan misslyckas i andra RDBMS.

Nu när du har lite förvirring om alias , i exemplet ovan är tabellnamnet test och i frågan ges ett pseudonamn som t1 . Också när du gör en självanslutning är det viktigt att du ger unika aliasnamn för samma bord. I exemplet ovan är samma tabell förenad med sig själv så vi måste se till att vi ger tabellerna ett aliasnamn.




  1. Fönsterfunktioner och mer lokal aggregering

  2. Hur SQL Server DIFFERENCE()-funktionen fungerar

  3. mysql-avgränsningsfel

  4. Varning:mysql_result() förväntar sig att parameter 1 är resurs, boolesk given