sql >> Database teknologi >  >> RDS >> Mysql

Vælg n rækker pr. gruppe i mysql

Du har mange løsninger, og en af ​​dem er at bruge left join og du kan tjekke 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

Logikken er at lave en venstre join med den samme tabel, hvor typen er den samme og prisen er lavere end den anden og til sidst lave en group by variationen og derefter bruge count() med at skulle vise antallet af poster du ønsker pr. gruppe. Bemærk, at i mysql har du en frihed til at have en gruppe efter klausul som i ovenstående forespørgsel på en vilkårlig måde, som kan mislykkes i andre RDBMS.

Nu har du en vis forvirring omkring alias , i ovenstående eksempel er tabelnavnet test og i forespørgslen gives et pseudonavn som t1 . Også når du laver en selvtilslutning, er det vigtigt, at du giver unikke aliasnavne til det samme bord. I eksemplet ovenfor er den samme tabel sammenføjet med sig selv, så vi skal sørge for, at vi giver tabellerne et aliasnavn.




  1. Slut tabel til et indlejret array [PHP/MYSQL]

  2. Får duplikatkolonnenavnsfejl i Django uden nogen åbenbar grund

  3. Hvordan kan jeg kontrollere MySQL-motortypen for en specifik tabel?

  4. Bruger du .aggregate() på en værdi introduceret ved hjælp af .extra(select={...}) i en Django-forespørgsel?